public class keyformat { /// <summary> /// 验证规则是否符合标准 /// </summary> /// <param name="format">需要验证的字符串</param> public bool TestFormat(string format) { Boolean f = true; if (IsStr(format, @"[^@_\$\d]+")) { f = false; } else if (IsStr(format, @"[^_]\$")) { f = false; } //数字只能在$之后且数字在字符串最前 else if (IsStr(format, @"[^\$]\d+|^\d+")) { f = false; } return f; } /// <summary> /// 将字符串按照format和key进行 /// </summary> /// <param name="str">要整理的字符串</param> /// <param name="format">规则</param> /// <param name="key">加密用的字符串</param> /// <returns></returns> public string GetFkstring(string str, string format, string key) { StringBuilder result = new StringBuilder(); if (TestFormat(format)) { format = GetFormat(format); int j = 0, k = 0; for (int i = 0; ; i++) { if (i == format.Length) { //规则先用完,先将字符串剩下的拼上,再将加密用的字符串拼上 result.Append(key.Substring(k)); if (j < str.Length) result.Append(str.Substring(j)); break; } if (format[i] == '@') { //若用完用“ ”补足 if (j >= str.Length) result.Append(" "); else result.Append(str[j]); j++; } else { result.Append(key[k]); k++; if (k == key.Length) { //加密用的字符串不够,将字符串剩下的拼上 if (j < str.Length) result.Append(str.Substring(j)); break; } } } } else { result.Append(str); } return result.ToString(); } /// <summary> /// 将key中的$加数字转换为@和_ /// </summary> /// <param name="format">需要转换的key</param> /// <returns></returns> private string GetFormat(string format) { if (TestFormat(format)) { int n = format.LastIndexOf("_$"); while (n > -1) { string formatbefore = format.Substring(0, n + 1); string formatafter = format.Substring(n + 2); //取出$后面的数字并把formatafter中的数字截掉 int reReplaceN = 1; string reReplaceNStr = MatchStr(formatafter, @"^(\d+)[@_]*"); if (reReplaceNStr != "") { reReplaceN = Int16.Parse(reReplaceNStr); formatafter = formatafter.Substring(reReplaceNStr.Length); } //得到要重复的字段 //_$之前提一个@或$ int replaceIndex = Math.Max(formatbefore.LastIndexOf("@"), formatbefore.LastIndexOf("$")); string replaceOne = ""; if (replaceIndex > -1) { replaceOne = formatbefore.Substring(replaceIndex); //如果是$把$和数字(如果有)去掉 if (replaceOne[0] == '$') { replaceOne = replaceOne.Substring(replaceOne.IndexOf('_')); } } //拼接 format = formatbefore + GetRepeatStr(replaceOne, reReplaceN) + formatafter; n = format.LastIndexOf("_$"); } return format.Replace("$", ""); } return ""; } /// <summary> /// 将字符串重复 /// </summary> /// <param name="str">需要重复的字符串</param> /// <param name="n">重复的次数</param> /// <returns></returns> private string GetRepeatStr(string str, int n) { string result = ""; for (int i = 0; i < n; i++) { result += str; } return result; } /// <summary> /// 根据正则找出匹配字符串 /// </summary> /// <param name="input">需要验证的字符串</param> /// <param name="pattern">正则</param> /// <returns></returns> private string MatchStr(string input, string pattern) { string result = ""; Regex r = new Regex(pattern); Match m = r.Match(input); if (m.Success) { result = m.Groups[1].ToString(); } return result; } /// <summary> /// 根据正则验证字符串是否符合要求 /// </summary> /// <param name="input">需要验证的字符串</param> /// <param name="pattern">正则</param> /// <returns></returns> private bool IsStr(string input, string pattern) { Regex r = new Regex(pattern); Match m = r.Match(input); return m.Success; } }