`

身份证验证算法

    博客分类:
  • js
阅读更多

公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

1、地址码

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

2、出生日期码

表示编码对象出生的年、月、日,按 GB/T 7408 的规定执行。

年、月、日代码之间不用分隔符。

例:某人出生日期为 1966年10月26日,其出生日期码为19661026。

3、顺序码

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

4 、校验码

校验码采用ISO 7064:1983,MOD 11-2 校验码系统。

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

S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和。

Ai:表示第i位置上的身份证号码数字值。

Wi:表示第i位置上的加权因子。

Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 。

(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

下面是java实现的代码:

package org.yz21.study.idcard;

public class IDCard {

// 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};

// verify digit

final int[] vi = {1,0,’X’,9,8,7,6,5,4,3,2};

private int[] ai = new int[18];

public IDCard() {

}

//verify

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(getVerify(idcard))) {

return true;

}

return false;

}

//get verify

public String getVerify(String eightcardid) {

int remaining = 0;

if (eightcardid.length() == 18) {

eightcardid = eightcardid.substring(0, 17);

}

if (eightcardid.length() == 17) {

int sum = 0;

for (int i = 0; i < 17; i++) {

String k = eightcardid.substring(i, i + 1);

ai = Integer.parseInt(k);

}

for (int i = 0; i < 17; i++) {

sum = sum + wi * ai;

}

remaining = sum % 11;

}

return remaining == 2 ? "X" : String.valueOf(vi[remaining]);

}

//15 update to 18

public String uptoeighteen(String fifteencardid) {

String eightcardid = fifteencardid.substring(0,6);

eightcardid = eightcardid + "19";

eightcardid = eightcardid + fifteencardid.substring(6,15);

eightcardid = eightcardid + getVerify(eightcardid);

return eightcardid;

}

}

测试代码:

使用的单元测试工具是junit

package org.yz21.study.idcard;

import junit.framework.Test;

import junit.framework.TestCase;

import junit.framework.TestSuite;

public class IDCardTest extends TestCase {

private String idcard1 = "11010519491231002X";

private String idcard2 = "440524188001010014";

public void testVerify() {

IDCard idcard = new IDCard();

this.assertTrue(idcard.Verify(idcard1));

this.assertTrue(idcard.Verify(idcard2));

}

public static Test suite() {

return new TestSuite(IDCardTest.class);

}

public static void main(String[] args) {

junit.textui.TestRunner.run(suite());

}

}

分享到:
评论

相关推荐

    C#身份证验证算法归类.pdf

    【C#身份证验证算法】 身份证验证是用于确认个人身份的重要工具,尤其是在中国,身份证号码是每个公民唯一的法定标识。在C#中实现身份证验证涉及到一系列的算法,这些算法需遵循中国的GB11643-1999标准。本文将深入...

    身份证验证算法(good)

    一个身份证识别的算法,有具体的c语言实现,简洁明了,适合初学者

    最霸道的身份证验证算法!

    史上最强的身份证正则表达式!能验证身份证真伪!不是随便身份证就能通过,能验证和现实匹配一样的数据!

    java实现的18位身份证格式验证算法

    身份证验证算法是计算机编程中一个常见的实用功能,特别是在处理个人数据和进行实名认证的场景下。在Java中实现18位身份证格式验证涉及到多个步骤,主要包括:校验位计算、出生日期转换以及地区编码验证。下面将详细...

    C#身份证验证.txtC#身份证验证.txtC#身份证验证.txt

    ### C#身份证验证算法解析 #### 身份证结构 身份证号码在中国分为两种格式:15位和18位。 - **15位身份证**:由6位地区码、6位出生日期(YYMMDD)和3位顺序码组成。 - **18位身份证**:由6位地区码、8位出生日期...

    身份证验证delphi窗口

    总之,“身份证验证delphi窗口”项目是一个涉及Delphi编程、身份证验证算法实现以及GUI界面设计的综合实践。通过这个项目,开发者不仅可以掌握Delphi的基本用法,还能学习到如何处理实际生活中的数据验证问题。

    C# 身份证 验证类 DLL 带源码

    7. **身份证验证算法**:在源码中,可能会包含如Luhn算法(也称为模10算法)来计算和验证校验码,或者使用特定的公式来检查地区码和出生日期的合理性。开发者可以通过源码理解这些验证步骤,并根据需要进行调整。 8...

    C#身份证验证器

    在IT行业中,身份证验证器是一种常见的实用工具,主要用于验证个人身份证号码的合法性,并根据有效身份证号码解析出对应的身份信息,如出生日期、性别以及户籍所在地等。本项目以C#编程语言实现,提供了用户友好的...

    javascript身份证验证

    本文将详细解析一个基于JavaScript的身份证验证算法,旨在帮助开发者理解和实现身份证号码的有效性检查。 #### 身份证号码结构 首先,了解身份证号码的结构是进行验证的基础。中国的身份证号码由18位数字组成,前...

    身份证验证器.zip

    本项目"身份证验证器.zip"是一个基于C#编程语言开发的身份信息验证工具,它旨在帮助开发者快速实现对中国大陆居民身份证号码的合法性和真实性的检查。下面我们将详细探讨这个工具的相关知识点。 1. **C#编程语言**:...

    身份证算法验证

    这是一个网页源码,身份证的验证。利用JavaScript制作的。

    身份证验证器

    【身份证验证器】是一款用于身份证真伪查询的软件工具,主要功能是帮助用户验证中国居民身份证的合法性。在日常生活中,我们可能需要确认个人身份信息的真实性,例如在租房、招聘、网络交易等场合,该工具就能派上...

    18位身份证号码验证算法.doc

    18位身份证号码验证算法.doc

    C#实现的18位身份证格式验证算法

    ### C#实现的18位身份证格式验证算法详解 身份证号码在中国大陆地区是个人身份的重要标识,由18位数字组成,其中包含了个人的出生日期、性别以及户籍所在地等信息。18位身份证号码遵循GB11643-1999标准,该标准在...

    JAVA+jsp身份证验证的合法性

    在IT行业中,身份证验证是常见的身份验证手段,尤其是在开发涉及个人信息的系统时,如会员注册、实名认证等。在Java Web开发中,使用JSP(JavaServer Pages)结合Java后端逻辑,我们可以实现对身份证合法性的有效...

    易语言身份证信息验证源码

    总的来说,通过学习和理解这个易语言身份证信息验证源码,开发者不仅可以掌握身份证验证技术,还能进一步提高易语言编程能力,尤其是字符串处理、日期运算、逻辑判断和错误处理等方面的知识。这将对开发涉及个人身份...

    php身份证验证

    我们将从以下几个方面进行深入分析:身份证号码的基本构成、验证算法、以及示例代码中的具体实现。 #### 二、身份证号码基本构成 中国的居民身份证号码由18位数字组成,分为四个部分: 1. **前六位**:表示编码...

    身份证验证系统 java

    身份证验证系统通常用于确认个人身份的合法性,它通过特定算法和数据库查询来验证身份证号码是否真实有效。Java作为编程语言,是实现这一系统的基础。 首先,身份证验证涉及到的是中国公民身份证号码的编码规则。...

Global site tag (gtag.js) - Google Analytics