文档章节

身份证号码验证算法

pmos
 pmos
发布于 2016/08/05 16:41
字数 679
阅读 37
收藏 3
点赞 0
评论 0

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

(一)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
PAT 1031. 查验身份证(15)

1031. 查验身份证(15) Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,...

xnh_565175944
2017/11/26
0
0
正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等

身份证号码的匹配 大陆的居民身份证号码有两种:18位和15位,15位的身份证号码是老一代身份证号码。 18位和15位的区别在于两个部分:第一,18位号码的年份以4位计而15位号码的年份为2位,如1...

_周小董
2017/11/30
0
0
中国身份证号码验证

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

晨曦之光
2012/03/09
100
0
正则表达式验证身份证格式是否正确

验证身份证号码是否符合规范,格式是否正确,首先要对输入的号码进行验证(包括长度,地区) $(function(){$(".identity").blur(function(){ var aCity = { 11: "北京", 12: "天津", 13: "河...

梦梦阁
2013/12/11
0
3
身份证号码生成器令网游实名注册形同虚设

来自新闻晨报的报道称目前流行一种“身份证号码生成器”的软件,使得网游实名注册形同虚设。 一种叫做“身份证号码生成器”的软件早已走俏网络。这个软件操作起来很方便,只要输入“省”、“...

红薯
2010/08/03
7.4K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery获取当前日期并且格式化

1.制定Format规则 //时间格式化问题Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 ......

gulf
3分钟前
0
0
Spring5(Java8版本)中的反射工具类和注解工具类

1.反射工具类 学习反射时很好的反射教程.这个工具类是基于Java8的。 package org.springframework.util;import java.lang.reflect.Constructor;import java.lang.reflect.Field;imp...

hutaishi
4分钟前
0
0
java io

Java IO在实际开发中的应用 http://www.cnblogs.com/ldh-better/p/7158658.html

小鱼吃大鱼
4分钟前
0
0
初见 react(当 React 版本是 ^16.2.0,当前时间 2018-01-12)

最近一段时间在零零碎碎地看 react 。在此,向所有自学 react 的朋友点个赞。多说一句,在自学道路上一定要戒骄戒躁,坚持下来。-----因为自学过程真的是心累啊(不同版本的博客不同的说法)...

秋季长青
5分钟前
0
0
grub2要启动整个iso的菜单命令如下

grub2要启动整个iso的菜单命令如下 menuentry "启动 Deepin OS Live System" --class deepin { set isofile=/DeepinOS.iso search -f --no-floppy --set=root $isofile set gfxpayload=keep ......

ziluopao
12分钟前
1
0
vue如何使用富文本编辑器wangEditor及图片上传

html定义一个装编辑器的DIV <template> <div id="editor"></div></template> npm安装wangEditor npm install wangeditor --save /wangeditor需要小写/ vue页面导入wangEditor import......

心鑫
16分钟前
0
0
乐观锁

最近公司一个项目中会遇到一个用户记录被多次插入的情况。其实在保存之前先判断有没有的。 觉得可以采用乐观锁机制来解决问题。 JPA之@Version进行乐观锁并发更新 使用JPA实现乐观锁 spring...

miaojiangmin
18分钟前
1
0
flowable 清除流程部署缓存

flowable 或者activity 修改流程图后 需要重启服务器。此文档可解决不用重启服务器,直接干货 public class DeploymentCacheCmd implements Command<Deployment>, Serializable { priv...

装死的乌龟
24分钟前
0
1
安装APK报错 INSTALL_FAILED_TEST_ONLY终极解决方案

1、检查\app\src\main\AndroidMainfest.xml中是否有testOnly属性为true,如果有去掉或者改为false 2、检查Android Studio和gradle版本是否为alpha版本,换为稳定版本 3、检查是否关闭Instant...

harukong
26分钟前
0
0
并发插入引发的死锁问题排查

一.业务背景 我们现在的业务是一款数据产品,有不少实时计算和爬取来的数据都汇总到大数据仓库、数据挖掘平台ODPS上。然后应用在读取这些数据时,这些数据会先导入到并发读能力更强,适合结构...

tantexian
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部