身份证效验
2016-05-17 22:12
162 查看
/// 作者:林宏权 /// http://www.songzhuren.com/ /// using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace IDCardCheck { class IDCard { //加权算法第一位到第十七位的系数: int[] iW = new int[] { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //身份证效验码字符串,与加权算法对位对应. string Lastcode = "10X98765432"; /// <summary> /// 获取身份证的第18位效验码. /// </summary> /// <param name="remainder"></param> /// <returns>第18位效验码字字符串.</returns> public string GetLastCode(int remainder) { //根据加权算法所获取的余数,返回对应的效验码. return Lastcode[remainder].ToString(); } /// <summary> /// 通过加权算法,获取效验码的余数. /// </summary> /// <param name="IDCardNumber"></param> /// <returns></returns> public int GetTheRemainder(string IDCardNumber) { int theSum = 0; //通过加权算法,求出身份证前17位的加权和. for (int position = 0; position < 17;position++ ) { theSum += int.Parse(IDCardNumber[position].ToString()) * iW[position]; } //加权和 除以 11 所得的余数为实验码对应余数. return theSum % 11; } } }
第十八位数字的计算方法为:
1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2.将这17位数字和系数相乘的结果相加。
3.用加出来和除以11,看余数是多少?
4余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。
其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
首先:我们得出,前17位的乘积和是189
然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。
最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。
第一位到第十七位的系数:
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(17位数字和系数相乘的结果相加 / 11) = 余数
余数范围:
0 1 2 3 4 5 6 7 8 9 10
余数对就数字:
1 0 X 9 8 7 6 5 4 3 2
相关文章推荐
- mac 第一次安装mysql 5.7.12 不知道root 密码的解决办法
- eclipse怎么修改工作空间路径
- centos 安装 tmux
- 指针、引用和取值
- red5源码分析---13
- 内核log打印级别
- MySQL 'type=InnoDB' 错误
- Java基础第八天听课总结(2)--多线程&Thread
- 16位单周期CPU设计
- 程序员的谎谬之言还是至理名言?
- iOS之网络请求的简单封装
- strcpy函数与memcpy函数(区别及实现 )
- 面试涉及的技术总结一——数据库优化
- 从头认识多线程-2.22 内部类的同步机制跟普通类相同
- 作业8:单元测试练习
- Window 2003 R2下安装squid透明代理
- 图的m着色问题
- Java基础 - 强引用、弱引用、软引用、虚引用
- eerThcraeSyraniBetadilaV.98
- 基于注解形式的hibernate二级缓存的使用(ehcache)