`

[转]java代码实现15位身份证号码升级到18位

    博客分类:
  • Java
阅读更多
原文地址:http://blog.csdn.net/mhmyqn/article/details/7684390
18位身份证号码的组成:
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码, 三位数字顺序码和一位数字校验码。
六位数字地址码:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
顺序码:
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验码:
(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

15位身份证号码的组成:
六位数字地址码,和18位一样,但出生日期只有年代,没有带世纪19,三位数字顺序码,没有校验码。
所以在升级时,需要在六位数字地址码后加上世纪19(因为15位身份证都是2000年前的了,之后的身份证都是18位的了),还要生成校验码。

具体代码如下:
/** 
 * @use 15位身份证升级、校验 
 * @ProjectName stuff 
 * @Author <a href="mailto:mhmyqn@qq.com">mumaoqiang</a></br> 
 * @Date 2011-5-13 下午09:53:09 </br> 
 * @FullName com.mmq.VerifyIDCardNumber.java </br> 
 * @JDK 1.6.0 </br> 
 * @Version 1.0 </br> 
 */  
public class VerifyIDCardNumber {  
      
    /** 
     * 根据15位的身份证号码获得18位身份证号码 
     * @param fifteenIDCard 15位的身份证号码 
     * @return 升级后的18位身份证号码 
     * @throws Exception 如果不是15位的身份证号码,则抛出异常 
     */  
    public String getEighteenIDCard(String fifteenIDCard) throws Exception{  
        if(fifteenIDCard != null && fifteenIDCard.length() == 15){  
            StringBuilder sb = new StringBuilder();  
            sb.append(fifteenIDCard.substring(0, 6))  
              .append("19")  
              .append(fifteenIDCard.substring(6));  
            sb.append(getVerifyCode(sb.toString()));  
            return sb.toString();  
        } else {  
            throw new Exception("不是15位的身份证");  
        }  
    }  
      
    /** 
     * 获取校验码 
     * @param idCardNumber 不带校验位的身份证号码(17位) 
     * @return 校验码 
     * @throws Exception 如果身份证没有加上19,则抛出异常 
     */  
    public char getVerifyCode(String idCardNumber) throws Exception{  
        if(idCardNumber == null || idCardNumber.length() < 17) {  
            throw new Exception("不合法的身份证号码");  
        }  
        char[] Ai = idCardNumber.toCharArray();  
        int[] Wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};  
        char[] verifyCode = {'1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};  
        int S = 0;  
        int Y;  
        for(int i = 0; i < Wi.length; i++){  
            S += (Ai[i] - '0') * Wi[i];  
        }  
        Y = S % 11;  
        return verifyCode[Y];  
    }  
      
    /** 
     * 校验18位的身份证号码的校验位是否正确 
     * @param idCardNumber 18位的身份证号码 
     * @return  
     * @throws Exception 
     */  
    public static boolean verify(String idCardNumber) throws Exception{  
        if(idCardNumber == null || idCardNumber.length() != 18) {  
            throw new Exception("不是18位的身份证号码");  
        }  
        return getVerifyCode(idCardNumber) == idCardNumber.charAt(idCardNumber.length() - 1);  
    }  
}  
分享到:
评论

相关推荐

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    18位身份证验证java程序实例

    4. **第十八位**:校验码,用于验证前面17位数字的有效性。 #### 校验码计算规则 校验码是根据前17位数字计算得出的。具体步骤如下: 1. 将前17位数字分别乘以不同的权重系数(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9...

    在Oracle中用Java实现身份证转换.pdf

    在Oracle数据库环境中,使用Java实现身份证转换是一种常见的技术需求,特别是在我国进行15位到18位身份证升级的过程中。Oracle数据库作为一个主流的关系型数据库,它提供了丰富的功能支持,包括通过Java来扩展其功能...

    身份证号码转化(Swing、JDBC、异常)原创

    例如,可能需要将15位的老版身份证号码升级到18位,或者从纯数字格式转化为包含校验码的完整格式。这通常需要对身份证号码的结构和计算规则有深入的理解。 在提供的压缩包中,"身份证号码转化(Swing、JDBC、异常)...

    身份证号校验、升位程序及源码

    这个“身份证号校验、升位程序及源码”提供了这样的功能,能够对15位或17位的身份证号码进行校验,并能将其升位到18位,同时计算出相关的个人信息。 首先,身份证号码的校验主要基于校验码的计算。中国的身份证号码...

    身份证号码验证算法深入研究和Java实现

    而在升级到18位之后,为了兼容旧的身份证号码,通常会在旧号码前补足19(表示1900年代)并加上合适的顺序码和校验码。 在实际项目中,有时候为了提高查询效率,数据库可能会存储身份证号码的前17位数字,这样做可以...

    二代身份证读取库

    【二代身份证读取库】是一种专门用于读取中国第二代身份证信息的技术库,它能够方便地获取身份证上的关键数据,包括持证人的头像、全名、性别、出生日期、住址以及身份证号码等个人信息。这一技术在众多领域都有广泛...

    华视CVR-100身份证阅读器BS开发包

    该开发包提供了多种编程语言的支持,包括C#、C++、Delphi、Java以及VB和VC,以便于开发者根据自己的技术栈选择合适的方式来实现身份证信息的读取与处理。 一、身份证阅读器介绍 华视CVR-100身份证阅读器是一款用于...

    JAVA实现简单的教师管理系统

    在本项目中,我们关注的是使用JAVA编程语言实现一个简单的教师管理系统。这个系统涉及到的核心知识点主要包括数据结构...在开发过程中,还需要考虑到代码的可读性、可维护性和扩展性,以便在未来进行功能升级和优化。

    java 农村合作医疗系统

    Java的面向对象特性使得系统模块化设计更为容易,提高了代码的可维护性和复用性。同时,Java的异常处理机制增强了系统的健壮性,确保在出现错误时能够及时恢复或给出错误提示。 1. **患者管理**:此模块是系统的...

    java card development kit

    Java Card技术是Oracle公司推出的一种安全的嵌入式计算平台,主要用于智能卡、SIM卡、电子身份证等设备,实现安全的存储和处理信息。Java Card Development Kit (JCDK) 是开发这种技术的基础工具集,提供了编写、...

    java+access学生信息管理系统

    2. Java连接数据库:编写Java代码,加载JDBC驱动,建立与Access数据库的连接,获取Connection对象。 3. CRUD操作: - 插入(Create):使用PreparedStatement预编译SQL语句,将用户输入的值设置到占位符,执行...

    学生信息管理系统(Java)

    学生信息管理系统是一款基于Java技术实现的桌面应用程序,它主要采用J2SE(Java Standard Edition)平台,并结合Swing图形用户界面库,为教育机构提供了一种高效、便捷的方式来管理和维护学生的信息。在本文中,我们...

    毕业设计,基于SSM+MySql+Bootstrap开发的体育场地预约使用系统可升级,内含Java完整源代码,数据库脚本等

    毕业设计,基于SSM+MySql+Bootstrap开发的体育场地预约使用系统可升级,内含Java完整源代码,数据库脚本等 SSM体育场地预约使用系统可升级SpringBoot毕业源码案例设计 程序开发环境:myEclipse/Eclipse/Idea都可以...

    Java卡安全性研究.zip

    Java卡安全性研究主要聚焦于如何在Java Card平台上确保信息安全,这是一种基于Java技术的微型智能卡应用平台,广泛应用于SIM卡、银行卡、身份证等安全敏感领域。Java Card技术结合了Java语言的可移植性和智能卡的...

    xuejiguanli.rar_Java学籍管理_xuejiguanli_学籍管理系统_学籍管理系统 JAVA

    2. **学生信息管理**:添加新学生信息时,系统会验证输入的合法性,如姓名、身份证号等,并将这些信息存储到数据库中。删除学生信息时,会先进行确认操作,防止误删。修改和查询信息则允许用户按姓名、学号等条件...

    基于Java-Web的图书管理系统的设计与实现.pdf

    《基于Java-Web的图书管理系统的设计与实现》 在当今信息化时代,计算机技术的应用已经深入到各个领域,图书管理系统作为教育机构中不可或缺的一部分,对于提升图书管理效率、优化服务流程起到了重要作用。本系统的...

    运用java图形界面编写的学生信息管理系统

    《基于Java图形界面的学生信息管理系统》 学生信息管理系统是一个典型的业务应用系统,它主要用于高校或教育机构对学生数据的管理和查询。在这个系统中,我们利用Java的图形用户界面(GUI)技术,为用户提供友好的...

Global site tag (gtag.js) - Google Analytics