添加收藏
 系统管理
 联系方式
  汉南在线网页设计JavaScript脚本

15位身份证号码转换成18位号码的算法
作  者:匿名
关键字:JavaScript



package com.comingnet.system;

public class F15ToE18 {

 public static final String getNewId(String id)
  {
    /*
     * 第十八位数字(校验码)的计算方法为:
         1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
         2.将这17位数字和系数相乘的结果相加。
         3.用加出来和除以11,看余数是多少?
         4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
         5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
     *
     */
     
   String new17id=id.subSequence(0, 6)+"19"+id.subSequence(6, id.length());  
   String[] w={"1","0","X","9","8","7","6","5","4","3","2"};       //尾数 
   int[] xs={7,9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5 ,8, 4, 2};  //要乘的系数 
   int num=0;
   for(int i=0;i<new17id.length();i++)
   {
    num=num+Integer.parseInt(""+new17id.charAt(i))*xs[i];
   }
   int ys=num%11;                   //17位号码依次乘以相关的系数之和再除以11后的余数
   String newid=new17id+w[ys];      //新生成的身份证号码
   return newid;
  }
 
 public static void main(String args[])
 {
  System.out.println(getNewId("330102820612001"));
  System.out.println(getNewId("330206821022307"));
  System.out.println(getNewId("330283830119003"));
  
  /*  测试号码
   *  33028319830119003 4  
      *  33010219820612001 8  
      *  33028219820807001 5  
      *  33020619821022307 x  
      *  34052419800101001 x
     */
 }
}

参考网上的资料,重新写了一下,很简单位。可能有些地方没有考虑到,直接在第6位之后加上19,我想原因可能是只考虑老的身份证转换的问题,如果是本世纪出生的人,身份证号码不会再出现15位了吧。



来源:网络
阅读:78
日期:2008-8-20

【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体: 】 
上一篇:利用dtree来实现树形下拉框
下一篇:GHOST版本WinXP SP2系统的IIS安装的问题及解决办法

  >> 相关文章
 
  ·Lightbox——新颖实用的显示图片效果
  ·java过滤html标签函数
  ·HTML代码过滤工具(正则表达式的应用)
  ·java 正则表达式过滤html元素
  ·js数据库操作的四种方法
  ·输入表单内容判断过滤
  ·javascript解析XML的方法
  ·JavaScript的9个陷阱及评点

5.12汶川大地震遇难同胞默哀 | 汉南在线总站 | 网站建设 | BT电影下载 | 汉南在线博客 | 流行购商城

授权使用:汉南在线 http://hnzx.hzwz.net/
经营许可证:陕ICP备05000109号 Powered by:汉南在线  
Copyright (c) 2002-2008 汉南在线. All Rights Reserved .