身份证号码验证算法

2017-11-02 旭东 Java编程 Java编程

Java编程

微信号 JavaCoder1024

功能介绍 关注语言编程Java,分享、交流Java编程技巧和信息

来自:旭东的博客 - 博客园

链接:cnblogs.com/xudong-bupt/p/3293838.html(点击尾部阅读原文前往)

做项目的时候需要对拿到的数据进行“清洗”,比如剔除一些不可能存在的身份证号码。查阅了网上的身份证号码验证算法,自己也总结一下。

(一)18身份证号码的结构

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。

1、地址码

表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。

2、出生日期码

表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

3、顺序码

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

4、校验码计算步骤

(1)十七位数字本体码加权求和公式

S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和 
Ai:表示第i位置上的身份证号码数字值(0~9) 
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)

(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

(二)根据17位数字本体码获取最后一位校验码程序实例

public class Id18 {   int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //十七位数字本体码权重   char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'}; //mod11,对应校验码字符值       public char getValidateCode(String id17){   int sum=0;   int mode=0;   for(int i=0;i<id17.length();i++){   sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];   }   mode=sum%11;   return validate[mode];   }   public static void main(String[] args){   Id18 test=new Id18();   System.out.println("该身份证验证码:"+test.getValidateCode("14230219700101101")); //该身份证校验码:3   }
}

(三)说明

1、程序可以根据已有的17位数字本体码,获取对应的验证码。

2、该程序可以剔除验证码不正确的身份证号码。

3、15位的身份证出生年份采用年份后2位,没有最后1位校验码。

4、完整的身份证18位,最后一位校验位可能是非数字。我们的一个项目,数据库保存前17位数字,这样对应一些SQL语句(比如inner join)有加速作用的!!!


●本文编号530,以后想阅读这篇文章直接输入530即可

●输入m获取文章目录

推荐↓↓↓

算法与数据结构

更多推荐《18个技术类微信公众号》

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

赞赏

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

阅读原文

阅读

投诉

java身份证号码验证算法相关推荐

  1. Java 身份证号码识别系统

    最近发现一个有趣的项目. 这个项目是通过学习https://gitee.com/nbsl/idCardCv 后整合 tess4j,不需要经过训练直接使用的,当然,你也可以进行训练后进行使用. 该项目修 ...

  2. Java 身份证号码验证工具类

    package cn.hlq.test;import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  3. JAVA 身份证号码有效性验证

    本文转自:http://www.blogjava.net/zeroline/archive/2011/01/03/342227.html </pre><pre name=" ...

  4. 新旧身份证合法性验证及相互转换算法(三):Java身份证号码验证及将15位转换18位

    package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 身份证号码验证 * */ pub ...

  5. Java身份证号码识别系统

    项目介绍 遇到问题 身份证号码识别 Required Software 项目更新 项目地址 项目介绍 本项目是通过学习https://gitee.com/nbsl/idCardCv 后整合tess4j ...

  6. 身份证号码验证算法 javascript实现

    在工作中的第一个项目就遇到了身份证号码验证问题,当时的做法是先正则进而判断前六位是否对应和出生日期是否是存在的时间,后四位果断扔掉不管,完全让后端去判断.但是在验证的阶段却出现了省市的编号收集不全.整 ...

  7. java身份证号码校验工具类

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  8. java身份证号码验证是否有效,校验是否成年

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  9. java 身份证号码校验工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory;/*** 校验身份证*/ public class IdCardUtil {privat ...

最新文章

  1. vue的自定义组件如何使用prop传值?
  2. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(一)...
  3. 数据结构--线性表顺序存储(顺序表)
  4. 因为我们还很穷,所以世界杯氛围差
  5. uniapp 支付(支付宝,微信支付)
  6. 暑假攻略:怎样让孩子过一个充实又省钱的假期
  7. 【华为云技术分享】气象模拟WRF容器化操作实践
  8. 很值得学习的java 画图板源码
  9. Anylogic遇到问题的解决
  10. 苹果手机怎么查看已连接的wifi密码_如何查看已连接的WiFi密码,可以这样做!...
  11. 12306系统升级对电力营销系统改造的启示
  12. linux 命令 aft,AFT整理出来的NPC检测命令大全
  13. iOS开发 宏定义,Pch文件的引入以及Header文件和Pch一起的使用方法(不用一直引入相同的头文件了,让你的开发更加快捷)
  14. Urban NeRF
  15. 微信小程序中的iPhone X适配解决
  16. Mac平台直播推流搭建
  17. Springboot高考志愿填报信息管理系统毕业设计-附源码
  18. 服务器虚拟化pue,降低数据中心PUE的八个办法
  19. spring动态代理
  20. PAT_乙级 1016 部分A+B(15)

热门文章

  1. centos7查看硬件温度,如cpu
  2. GrapeCity Documents for Word PDF或图像报告
  3. 用 Photoshop 计算命令优化美女照片皮肤
  4. 微软CRM 2011 Beta Show
  5. 云计算/边缘计算/雾计算
  6. 【多目标跟踪论文阅读笔记——Tracktor++】
  7. 谷歌眼镜GDK开发指南之Immersions
  8. 使用IO流对文件进行编写功能
  9. 兔子繁殖问题,兔子有寿命限制
  10. Maya(玛雅)文明