需求:
对身份证号中段字符进行隐藏,用星号(*)代替。前后仅显示出来4位。
这明显就是一个字符串操作,对于星号的生成一开始想到的是用for循环,但仔细想想由于字符串的不可变性这样循环N次就会生成N个对象。
查了查.net的string类果然其构造函数原来就支持这种构造方式,不过这个我咋没看懂捏~
api如下:
1 /// <summary> 2 /// 将 <see cref="T:System.String"/> 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。 3 /// </summary> 4 /// <param name="c">一个 Unicode 字符。</param><param name="count"><paramref name="c"/> 出现的次数。</param><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="count"/> 小于零。</exception> 5 [SecuritySafeCritical] 6 [__DynamicallyInvokable] 7 [MethodImpl(MethodImplOptions.InternalCall)] 8 public String(char c, int count);
最终的实现:
1 void Main() 2 { 3 string s = "123456789012345"; 4 s = convert(s); 5 Console.WriteLine(s); 6 } 7 8 string convert(String s) 9 { 10 //身份证的校验.这块太复杂了校验位,出生年月日等.... 11 //校验通过后的身份证只有15位和18位 12 string tmpString = s.Length == 15 ? new String('*', 7) : new String('*', 10); 13 int startIndex = s.Length == 15 ? 11 : 14; 14 return string.Format("{0}{1}{2}", s.Substring(0, 4), tmpString, s.Substring(startIndex, 4)); 15 }