文档章节

身份证号码验证算法

pmos
 pmos
发布于 2016/08/05 16:41
字数 679
阅读 39
收藏 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

共有 人打赏支持
pmos
粉丝 12
博文 123
码字总数 208836
作品 0
其它
项目经理
身份证号码验证算法

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

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

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

梦梦阁
2016/04/08
49
0
一个身份证验证接口[4]

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

vinci321
02/08
3
0
身份证、护照验证 身份证号码获取生日、性别信息

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

Jansens
2016/10/27
16
0
一个身份证号码验证接口[0]

背景:之前在地铁站遇到有警察查身份证,没有带身份证报身份证号码也可以,实际上是调用公安部身份证数据库的接口进行查询的,他们能做,为什么我不能做来看看? 实现功能: 输入一个身份证号...

vinci321
01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部