寂寞部屋
- 关注互联网,关注生活
关注互联网,关注生活
2019年五月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  
  • 日志总数:553 篇
  • 浏览总量:2,435,461 次
  • 运行天数:619 天
  • 建站时间:2017-9-14
  • 最后更新:2019-4-2

18位身份证严格验证及15位转18位

C#代码
  1. private string GetCard(string cid)   
  2. {   
  3.     if (cid.Length == 15)   
  4.     {   
  5.         cid = per15To18(cid);   
  6.     }   
  7.     string[] aCity = new string[] { nullnullnullnullnullnullnullnullnullnullnull"北京""天津""河北""山西""内蒙古"nullnullnullnullnull"辽宁""吉林""黑龙江"nullnullnullnullnullnullnull"上海""江苏""浙江""安微""福建""江西""山东"nullnullnull"河南""湖北""湖南""广东""广西""海南"nullnullnull"重庆""四川""贵州""云南""西藏"nullnullnullnullnullnull"陕西""甘肃""青海""宁夏""新疆"nullnullnullnullnull"台湾"nullnullnullnullnullnullnullnullnull"香港""澳门"nullnullnullnullnullnullnullnull"国外" };   
  8.     double iSum = 0;   
  9.     //string info="";    
  10.     System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^d{17}(d|x)$");   
  11.     System.Text.RegularExpressions.Match mc = rg.Match(cid);   
  12.     if (!mc.Success)   
  13.     {   
  14.         // return "格式不正确!";    
  15.         return "";   
  16.     }   
  17.     cid = cid.ToLower();   
  18.     cid = cid.Replace("x""a");   
  19.     if (aCity[int.Parse(cid.Substring(0, 2))] == null)   
  20.     {   
  21.         //return "非法地区";    
  22.         return "";   
  23.     }   
  24.     try  
  25.     {   
  26.         DateTime.Parse(cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2));   
  27.     }   
  28.     catch  
  29.     {   
  30.         //return "非法生日";    
  31.         return "";   
  32.     }   
  33.     for (int i = 17; i >= 0; i–)   
  34.     {   
  35.         iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 – i].ToString(), System.Globalization.NumberStyles.HexNumber);   
  36.   
  37.     }   
  38.     if (iSum % 11 != 1)   
  39.         //return("非法证号");    
  40.         return ("");   
  41.   
  42.     return (cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2));   
  43.   
  44. }   
  45.   
  46. private string per15To18(string perIDSrc)   
  47. {   
  48.     int iS = 0;   
  49.   
  50.     //加权因子常数    
  51.     int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };   
  52.     //校验码常数    
  53.     string LastCode = "10X98765432";   
  54.     //新身份证号    
  55.     string perIDNew;   
  56.   
  57.     perIDNew = perIDSrc.Substring(0, 6);   
  58.     //填在第6位及第7位上填上‘1’,‘9’两个数字    
  59.     perIDNew += "19";   
  60.     perIDNew += perIDSrc.Substring(6, 9);   
  61.     //进行加权求和    
  62.     for (int i = 0; i < 17; i++)   
  63.     {   
  64.         iS += int.Parse(perIDNew.Substring(i, 1)) * iW[i];   
  65.     }   
  66.   
  67.     //取模运算,得到模值    
  68.     int iY = iS % 11;   
  69.     //从LastCode中取得以模为索引号的值,加到身份证的最后一位,即为新身份证号。    
  70.     perIDNew += LastCode.Substring(iY, 1);   
  71.   
  72.     return perIDNew;   
  73. }   

 

来源:http://www.vs2005.com/Code/a359p1.aspx

本站原创文章,请勿复制转载
版权声明:除特别注明外,本站所有文章均为原创,未经许可请勿复制、转载
2008-01-05
2,774 views
标签: , , ,
暂无评论

发表评论

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。