文档章节

身份证号码验证算法

pmos
 pmos
发布于 2016/08/05 16:41
字数 679
阅读 45
收藏 3

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

(一)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 tes t= new Id18();
        System.out.println("该身份证验证码:"+test.getValidateCode("14230219700101101"));    //该身份证校验码:3
    }
}

(三)说明

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

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

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

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

本文转载自:http://www.techug.com/id-card-number-check-algorithm

共有 人打赏支持
上一篇: JDBC初步
pmos
粉丝 12
博文 123
码字总数 208836
作品 0
其它
项目经理
私信 提问
身份证号码验证算法

有时候做项目的需要对拿到的数据进行“清洗”,比如验证身份证号码是否存在。 (一)18身份证号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依...

驛路梨花醉美
2016/09/13
29
0
JS验证身份证号码是否合法

现在经常会遇到让输入身份证号码的需求,那么我们应该如何验证身份证号码的合法性呢?今天我们来说一说验证的方法。 function checkIdcard(num){ num = num.toUpperCase(); //身份证号码为1...

梦梦阁
2016/04/08
49
0
身份证、护照验证 身份证号码获取生日、性别信息

功能描述 录入一些客户的信息,证件验证,例如身份证、护照验证等。身份证号码验证正确以后,手动录入后实现能自动显示生日、性别 信息,不用手动填写。 身份证号码组合方式 中华人民共和国公...

Jansens
2016/10/27
16
0
中国身份证号码验证

using System; /// /// Summary description for IDCardValid /// public class IDCardValid { public IDCardValid() { // // TODO: Add constructor logic here // } /// /// 验证身份证号码......

晨曦之光
2012/03/09
114
0
一个身份证验证接口[4]

代码: 结果: 测试数据来源: http://shenfenzheng.293.net/?tt_t=0.9766452528640315 的前五条。 可以看到,数据匹配。同时,用于测试的数据由程序随机组合而成,这个也容易实现。若干年前全...

vinci321
02/08
3
0

没有更多内容

加载失败,请刷新页面

加载更多

JVM问题排查也不是很难--工具使用

目录 概述 环境准备 工具介绍 远程连接方式 开启JMX 工具远程连接 参考文献 概述 线上环境中,程序越来越慢,一头雾水?遇到程序经常宕机,但找不到原因?排查问题却经常记不住命令? 那是没找到好...

java_龙
14分钟前
2
0
MySQL

1、查看数据库中所有的数据表: SHOW DATABASES; 2、连接数据库: use (数据库名); 3、显示已经打开的数据库: SELECT DATABASE(); 4、创建数据表: CREATE TABLE (数据表的名字)(第...

墨冥
22分钟前
2
0
idea 设置背景色

编辑界面背景色 控制台背景色

暗中观察
24分钟前
1
0
Win10强制更新怎么关闭 彻底禁止Windows自动更新方

Win10强制更新怎么关闭 彻底禁止Windows自动更新方法 (全文) 百事数码原创 2018-07-06 17:39电脑百事网7843 + 关注 很多Win10用户来说经常会遇到这样的烦恼,电脑系统会不时的提醒自动更新,...

阿K1225
39分钟前
2
0
不用编写程序代码,送你一个爬虫程序批量采集猫眼电影票房数据

"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大,指代大型数据集,一般在1...

技术阿飞
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部