Java代码验证18位身份证号码是不是真的
来源:互联网 发布:skype business mac版 编辑:程序博客网 时间:2024/05/01 17:43
身份证号码很可能是瞎写的,如何验证?当然这里说的验证是指验证这个身份证号码是合法的号码,但是不能验证与其匹配的姓名是否合法。
规则如下:
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
1、地址码(前六位数)
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2、出生日期码(第七位至十四位)
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
3、顺序码(第十五位至十七位)
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
4、校验码(第十八位数)
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模
Y = mod(S, 11)
(3)通过模得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
Java代码如下:
int weight[]=new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
String strID="460028190001012452";
int sum = 0;
for(int i=0;i<strID.length()-1;i++){
String ch=strID.substring(i , i+1);
sum+=weight[i]*Integer.parseInt(ch);
}
System.out.println(""+sum%11);
System.out.println("Y: 0 1 2 3 4 5 6 7 8 9 10\n校验码: 1 0 X 9 8 7 6 5 4 3 2 ");
当然可以用个switch语句将其比对就可以自动判断了。
- Java代码验证18位身份证号码是不是真的
- java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.
- 18位身份证号码验证算法代码
- 18位身份证号码验证算法代码
- 18位身份证号码验证算法代码
- java代码验证身份证号码
- Java身份证号码验证及将15位转换18位
- 身份证号码的验证及15位升18位算法
- java代码实现15位身份证号码升级到18位
- java代码实现15位身份证号码升级到18位
- 15位身份证号码转换成18位身份证号码(java代码)
- C#实现的18位身份证号码最新算法[验证部分]
- 关于18位身份证号码的结构与验证
- Jquery 对 身份证号码的验证 (15/18位)
- Jquery 对 身份证号码的验证 (15/18位)
- Java实现身份证号码的验证,JAVA后台验证身份证号码
- JS练手:18位身份证号码验证
- 中国身份证号码验证,支持15,18位
- Slfj + Logback 时,基本的 logback.xml 配置
- 理解 JavaScript 中的 new
- OpenCV Learning: cvQueryFrame遇到的问题
- Unity3D脚本架构
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- Java代码验证18位身份证号码是不是真的
- Linux添加虚拟内存解决swap空间不足问题
- 如果python程序写硬盘太慢,可以考虑输出为二进制。且save 和load 都用pickle比较方便
- 一篇讲述委托和事件的好文章
- cocos2d-x aplha3.0中添加touch事件
- 状态机编程技巧:状态表与函数表
- IOS网络访问详解
- 斐波那契数列求第N项的值
- 不走索引原因