`

身份证号码的编码原理

 
阅读更多
身份证号码的编码原理:
号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码 ,八位数字出生日期码 ,三位数字顺序码 和一位数字校验码 。

校验码的计算[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


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]);  
  
    }  
}  


  


  
分享到:
评论

相关推荐

    易语言身份证号码归属地查询系统

    本文将深入探讨使用易语言开发的身份证号码归属地查询系统的实现原理、功能特点以及相关技术要点。 一、系统概述 易语言是一款以“易”为设计理念的编程工具,它以其直观的图形化界面和简洁的语法规则,降低了编程...

    身份证号码批量校验软件idcheck

    这是中国对公民身份号码编码规则的规定,规定了身份证号码的结构、编码规则和校验方法。一个有效的18位身份证号码由6位地区代码、8位出生日期码和3位顺序码(奇数年出生的男性为偶数,偶数年出生的男性为奇数,女性...

    java写的身份证号码校验类

    本文将详细介绍如何使用Java语言编写一个身份证号码校验类,并对其实现原理进行深入解析。 #### 二、身份证号码结构 身份证号码分为四部分: 1. **行政区划代码**:前六位数字表示持有人所在的省(自治区、直辖市...

    六年级下册数学教案 探索乐园 身份证号码 冀教版 (2).docx

    《数字编码》这一课是冀教版小学数学六年级下册探索乐园的内容,主要围绕身份证号码的结构和编码原理展开教学。本课的教学目标旨在帮助学生理解身份证号码的构成及其含义,掌握数字编码的基本方法,并能运用所学知识...

    基于深度学习的身份证号码识别方法.pdf

    身份证号码识别是人工智能领域中图像识别与模式识别技术的典型应用场景之一。在数字化时代,将传统证件信息快速、准确地转换为机器可识别的数字信息对于提高业务效率、优化用户体验具有重要意义。深度学习的兴起为...

    三年级上册数学数字编码之身份证PPT课件.pptx

    身份证号码是一个典型的数字编码实例,它包含了丰富的个人信息。 首先,身份证号码由18位数字组成,其中前6位代表地址码,具体到省、市、区县;接下来的8位是出生日期,依次为年、月、日;然后的3位是顺序码,用于...

    身份证号里获取出生年月

    根据提供的信息,我们可以深入探讨如何从身份证号码中提取出生年月这一知识点。 ### 一、身份证号码结构解析 中国的居民身份证号码由18位数字组成,每一部分都有其特定的意义: 1. **行政区划代码(前6位)**:...

    [其他类别]身份证号码验证示例源码_idcardvalid(ASP.NET源码).rar

    身份证号码验证示例源码_idcardvalid是一款基于ASP.NET技术开发的工具,主要用于验证中国居民身份证号码的合法性。在互联网应用中,身份证号码验证是非常重要的一环,它可以帮助确保用户输入的身份信息准确无误,...

    数字编码身份证教学设计3.doc

    本教学设计的主题围绕“数字与编码——身份证”,旨在帮助五年级的学生了解身份证号码的含义及其编码原理。教学目标分为知识与技能、过程与方法以及情感态度与价值观三个方面: 1. **知识与技能**: - 学生需要...

    三年级上册数学数字编码之身份证学习教案.pptx

    总结来说,这个教案旨在使三年级的学生理解数字编码的原理,尤其是身份证号码的构成和含义,培养他们通过数字解码获取信息的能力,并提高他们的逻辑思维和问题解决技巧。通过有趣的侦探游戏和实际生活情境,让抽象的...

    正则表达式截取身份证号码加密的方法

    本文就将介绍一种使用正则表达式截取并加密身份证号码的方法,同时,还将解释身份证号码的结构组成和通过正则表达式验证身份证号码合法性的基本原理。 首先,我们来了解一下身份证号码的组成与结构。根据国家标准,...

    五年级数学上册教案——数字编码——身份证与学号.doc

    教学内容选自人教版五年级上册数学教材的《数字编码与学号》部分,旨在让学生理解和掌握编码的基本原理,并通过学习身份证号码的构成,培养他们的逻辑思维能力和信息处理能力。 教学目标分为知识与技能、过程与方法...

    身份证验证系统 java

    首先,身份证验证涉及到的是中国公民身份证号码的编码规则。中国的身份证号码由18位数字组成,包含了出生日期、性别、地区代码等信息。验证身份证号码时,我们需要检查号码的结构是否符合规则,如前6位代表地区代码...

    2012人教版五年级上册数学广角《数字编码之身份证》教学课件.ppt

    《数字编码之身份证》教学课件主要探讨了生活中常见的数字编码体系,特别是在身份证号码上的应用。数字编码在现代社会中无处不在,从电话区号、车牌号码到邮政编码,它们都扮演着信息传递和管理的重要角色。 首先,...

    数字与编码——身份证教学设计.docx

    此教学设计注重将数学知识与现实生活相结合,通过探究身份证号码的结构,使学生能够初步掌握数字编码的相关原理,并培养他们的数感和信息处理能力。 教学设计分为四个主要部分: 1. 学习内容分析:教材选取了...

    身份证验证javascript脚本

    通过以上分析,我们可以看出这段JavaScript脚本主要实现了对身份证号码的基本验证,包括地区编码、生日日期以及18位身份证的校验码验证。开发者可以根据具体需求调整和扩展该脚本的功能,以满足更复杂的验证场景。...

    身份证中的数学.pdf

    【身份证编码原理与数学应用】 身份证号码是我们生活中不可或缺的一部分,它不仅用于个人身份识别,还蕴含着丰富的数学信息。在15位到18位的转变中,我们可以深入理解身份证号码的设计逻辑,以及数学在其中起到的...

    身份证验证器

    身份证验证器的工作原理就是基于这些编码规则进行校验。 在中国,身份证不仅是公民身份的法定证明,也是办理各种社会事务的重要证件。因此,确保身份证信息的准确性和安全性至关重要。使用身份证验证器可以有效避免...

    身份证号真伪识别器 C#开发

    本文将详细解析使用C#语言开发的身份证号真伪识别器的相关知识点,帮助读者深入理解其原理和实现方法。 一、C#编程语言 C#是一种由微软公司开发的面向对象的编程语言,它被广泛用于Windows应用程序开发、Web应用...

Global site tag (gtag.js) - Google Analytics