身份证号码的编码原理:
号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码 ,八位数字出生日期码 ,三位数字顺序码 和一位数字校验码 。
校验码的计算[b][/b]
(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
S: =(4*7+5*9+2*10+1*5+2*8+4*4+1*2+9*1+8*6+3*3+0*7+7*9+0*10+3*5+0*8+3*4+9*2) = 306;
(2)计算模
Y = mod(S, 11)
Y=306%11=9;
(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代码
class VerifyIdCard {
// 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 };
// 校验码
final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
private int[] ai = new int[18];
public VerifyIdCard() {
}
// 校验身份证的校验码
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;
}
// 15位转18位
public String uptoeighteen(String fifteen) {
StringBuffer eighteen = new StringBuffer(fifteen);
eighteen = eighteen.insert(6, "19");
return eighteen.toString();
}
// 计算最后一位校验值
public String getVerify(String eighteen) {
int remain = 0;
if (eighteen.length() == 18) {
eighteen = eighteen.substring(0, 17);
}
if (eighteen.length() == 17) {
int sum = 0;
for (int i = 0; i < 17; i++) {
String k = eighteen.substring(i, i + 1);
ai[i] = Integer.valueOf(k);
}
for (int i = 0; i < 17; i++) {
sum += wi[i] * ai[i];
}
remain = sum % 11;
}
return remain == 2 ? "X" : String.valueOf(vi[remain]);
}
}
转自:
http://xuwb1220.iteye.com/blog/1688093
分享到:
相关推荐
【身份证编码原理与数学应用】 身份证号码是我们生活中不可或缺的一部分,它不仅用于个人身份识别,还蕴含着丰富的数学信息。在15位到18位的转变中,我们可以深入理解身份证号码的设计逻辑,以及数学在其中起到的...
本教学设计的主题围绕“数字与编码——身份证”,旨在帮助五年级的学生了解身份证号码的含义及其编码原理。教学目标分为知识与技能、过程与方法以及情感态度与价值观三个方面: 1. **知识与技能**: - 学生需要...
《三年级上册数学数字编码之身份证》这节课件主要探讨了数字编码在身份证中的应用,旨在...通过学习,学生们不仅能理解数字编码的基本原理,还能学会如何利用这些知识解决实际问题,增强了他们对数学的兴趣和应用意识。
此教学设计注重将数学知识与现实生活相结合,通过探究身份证号码的结构,使学生能够初步掌握数字编码的相关原理,并培养他们的数感和信息处理能力。 教学设计分为四个主要部分: 1. 学习内容分析:教材选取了...
总结来说,这个教案旨在使三年级的学生理解数字编码的原理,尤其是身份证号码的构成和含义,培养他们通过数字解码获取信息的能力,并提高他们的逻辑思维和问题解决技巧。通过有趣的侦探游戏和实际生活情境,让抽象的...
教学内容选自人教版五年级上册数学教材的《数字编码与学号》部分,旨在让学生理解和掌握编码的基本原理,并通过学习身份证号码的构成,培养他们的逻辑思维能力和信息处理能力。 教学目标分为知识与技能、过程与方法...
身份证验证器的工作原理就是基于这些编码规则进行校验。 在中国,身份证不仅是公民身份的法定证明,也是办理各种社会事务的重要证件。因此,确保身份证信息的准确性和安全性至关重要。使用身份证验证器可以有效避免...
身份证信息通常以Base64编码的形式存储,需要解码后才能获取到明文。这个过程可能涉及到汉字编码转换,例如GB2312转UTF-8。 描述中提到的“云解码”服务,是指将身份证原始数据发送到远程服务器进行解码处理。这...
本文将深入探讨二代身份证阅读器的工作原理,以及如何利用C#编程语言进行相关开发。 【二代身份证】是指中国自2004年起发行的内置非接触式IC芯片的新版身份证,它存储了持证人的个人信息,包括姓名、性别、出生日期...
首先,身份证验证涉及到的是中国公民身份证号码的编码规则。中国的身份证号码由18位数字组成,包含了出生日期、性别、地区代码等信息。验证身份证号码时,我们需要检查号码的结构是否符合规则,如前6位代表地区代码...
### 身份证验证原理 身份证号码在中国通常有两种格式:15位和18位。这两种格式都有其特定的验证规则。 #### 15位身份证号码验证规则: - 前六位代表地区编码。 - 接下来的六位表示出生日期(YYMMDD)。 - 最后的三...
通过本课件的学习,学生们不仅可以了解数字编码的基本原理,还能提高分析和解决问题的能力,进一步认识到数字编码在日常生活中的重要性。同时,这也提醒我们在日常生活中要妥善保管好包含个人信息的证件,防止信息...
这是中国对公民身份号码编码规则的规定,规定了身份证号码的结构、编码规则和校验方法。一个有效的18位身份证号码由6位地区代码、8位出生日期码和3位顺序码(奇数年出生的男性为偶数,偶数年出生的男性为奇数,女性...
本文将深入探讨使用易语言开发的身份证号码归属地查询系统的实现原理、功能特点以及相关技术要点。 一、系统概述 易语言是一款以“易”为设计理念的编程工具,它以其直观的图形化界面和简洁的语法规则,降低了编程...
首先,我们需要理解身份证阅读器的工作原理。身份证阅读器通过非接触式RFID技术读取身份证内置芯片中的信息,这些信息包括持证人的姓名、性别、出生日期、住址以及证件号码等。在Delphi中,开发者需要编写代码来监听...
本文将详细解析使用C#语言开发的身份证号真伪识别器的相关知识点,帮助读者深入理解其原理和实现方法。 一、C#编程语言 C#是一种由微软公司开发的面向对象的编程语言,它被广泛用于Windows应用程序开发、Web应用...
在身份证识别过程中,该工具可能运用了光学字符识别(OCR,Optical Character Recognition)技术,这是一种将图像中的文字转换为机器编码文本的技术。OCR技术通常包括预处理、特征提取、分类器设计和后处理等步骤。...
1. **行政区划代码(前6位)**:表示持证人常住户口所在地的县、市、区或旗的编码。 2. **出生日期码(第7至14位)**:表示持证人的出生日期,格式为YYYYMMDD。 3. **顺序码(第15至17位)**:表示在同一地址范围内...