用 C# 实现18位身份证的验证
用 C# 实现18位身份证的验证
在实际工作中我们经常会用到对身份证进行验证的操作,比如员工档案中身份信息的管理等等。长达18位的数字谁也不敢说每次都能绝对的输入正确,如果能对输入的身份证进行一下验证的话,会最大限度的保证资料的正确性。
接着我们来说说18位身份证的结构吧,大体可以吧18位的数字分为两个部分,前17位表示的是身份信息,也就是哪个省、哪个市,以及出生年月等等,最后一位也就是第18位是效验位,也就是用来验证前17位的信息是否正确的,如果前17位中有某个数字输入有误,那么经过换算后的结果一般情况下是不等于第18位的。
再来说说具体如何进行计算吧。这里我们需要一组固定的数字,即加权因子,一共17个,别问为什么是这17个数字,因为规定给出的就是这些数字,只管用就行了。17个数字分别为{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}。
接着我们需要一个总和,这个总和是用身份证的第i位乘以上面一组数字的第i位相加的出来的,就是 身份证的第一个数字*7+身份证的第2个数字*9...这样把17位计算完毕后会得到一个总和,我们就给这个总和起个名字吧——sum。
再来就是需要一个取余的计算了,用上面得到的总和sum与11进行取余运算,别问为什么是11,就是这么规定的,得到余数,我们给余数也起个名字yu,到这里就基本上差不多了。
接着再给出一组数字——效验位{"1","0","X","9","8","7","6","5","4","3","2"},还是那句话,别问为什么是这些数字,规定就是这样,拿来用就行了。
用身份证的效验位也就是第18位与上面那组效验位数字中的第yu个数进行比较,如何相等的话,身份证就是合法的。
下面给出一个C#代码实现对18位身份证验证地方法,大家可以参考下。
bool checkID(string id) { //17位加权因子 int[] wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; string id17=id.Substring(0,17); //获取身份证的前17位 string idend=id.Substring(17); //获取身份证的效验位(第18位) int sum=0; //加权求和id[i]*wi[i]求和 for (int i=0;i<id17.Length;i++) { sum+=Convert.ToInt32(id17[i].ToString())*wi[i]; } //效验码 string[] xiaoyanma={ "1" , "0" , "X" , "9" , "8" , "7" , "6" , "5" , "4" , "3" , "2" }; // 用加权求和的值与11进行求余运算,并与效验码对应位数进行比较 |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。