java实现—身份证号码验证
来源:互联网 发布:什么扫描软件免费 编辑:程序博客网 时间:2024/04/28 18:42
身份证号码的编码原理:
号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码 ,八位数字出生日期码 ,三位数字顺序码 和一位数字校验码 。
校验码的计算
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前 17 位数字的权求和
Ai: 表示第 i 位置上的身份证号码数字值
Wi: 表示第 i 位置上的加权因子
Wi: 7 9 10 5 8 421637 9 10 5 8 4 2
S:=(4*7+5*9+2*10+1*5+2*8+4*4+1*2+9*1+8*6+3*3+0*7+7*9+0*10+3*5+0*8+3*4+9*2)= 306;
(2)计算模
Y = mod(S, 11)
Y=306%11=9;
(3)通过模得到对应的校验码
Y: 0 1 2 3 456789 10
校验码 : 10X987 6 5 4 3 2
java代码实现:
class VerifyIdCard { // wi =2(n-1)(mod 11);加权因子 final int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 }; // 校验码 final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 }; private int[] ai = new int[18]; public VerifyIdCard() { } // 校验身份证的校验码 public boolean verify(String idcard) { if (idcard.length() == 15) { idcard = uptoeighteen(idcard); } if (idcard.length() != 18) { return false; } String verify = idcard.substring(17, 18); if (verify.equals(this.getVerify(idcard))) { return true; } return false; } // 15位转18位 public String uptoeighteen(String fifteen) { StringBuffer eighteen = new StringBuffer(fifteen); eighteen = eighteen.insert(6, "19"); return eighteen.toString(); } // 计算最后一位校验值 public String getVerify(String eighteen) { int remain = 0; if (eighteen.length() == 18) { eighteen = eighteen.substring(0, 17); } if (eighteen.length() == 17) { int sum = 0; for (int i = 0; i < 17; i++) { String k = eighteen.substring(i, i + 1); ai[i] = Integer.valueOf(k); } for (int i = 0; i < 17; i++) { sum += wi[i] * ai[i]; } remain = sum % 11; } return remain == 2 ? "X" : String.valueOf(vi[remain]); } }
0 0
- java实现—身份证号码验证
- java实现—身份证号码验证
- Java实现身份证号码验证
- Java实现身份证号码的验证,JAVA后台验证身份证号码
- java实现身份证号码验证及修改
- js实现身份证号码验证
- js实现身份证号码验证
- js实现身份证号码验证
- C实现身份证号码验证
- js实现身份证号码验证
- js实现身份证号码验证
- java代码验证身份证号码
- java验证身份证号码
- Java验证身份证号码
- Java身份证号码数据验证
- JAVA 身份证号码有效性验证
- Java 身份证号码验证程序
- java验证身份证号码
- 面试总结,多进程和多线程的区别
- POJ&&HDU A Walk Through the Forest
- Navigation Drawer--左侧滑导航
- Linux epoll详解
- 获取Google Maps API 指纹证书时获取的是SHA1型的,而认证时需要的是MD5的解决方法【转】
- java实现—身份证号码验证
- IOS回调机制——代理,通知中心以及Block
- mipi 调试经验
- pjsip研究3
- 存储器的构建
- 正则表达式验证时能输入数字
- 安装Google Map API
- Spark:一个高效的分布式计算系统
- i2c 协议解析