A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© smhjx2006 中级黑马   /  2013-6-5 14:34  /  1359 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

/**
*身份证号码最后一位的计算方法
*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-10这11个数字。这11个数字分别对应的最后一位身份证号码为:
* 1-0-X-9-8-7-6-5-4-3-2.
*/
import java.util.*;
class  IdCardDemo
{
public static void main(String[] args)
{
  Scanner console = new Scanner(System.in);
  System.out.print("请输入18位的身份证号:");
  int count = 0;//记录校验次数,最多三次
  while(true)
  {
   //通过键盘录入获取身份证号码。
   String id = console.nextLine();
   if(verify(id))
   {
    System.out.println("合法身份证号!");
    break;
   }
   else
   {
    System.out.println("非法身份证号!");
    if(++count==3)
     break;
    System.out.print("请重新输入身份证号:");
   }
  }
}
//定义方法verify,此方法计算出id的最后一位和输入的最后一位是否一致,相同返回true,不同返回false
public static  boolean verify(String id)
{
  if(id.length()!=18)
   return false;
  //定义每位身份证号码的系数
  int[] w = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
  int sum = 0;
  for(int i = 0;i<w.length;i++)
  {
   //将每一位身份证号和对应系数相乘之后相加求和,注意”charAt(i)-'0':将字符数字转换成数字
   sum+=(id.charAt(i)-'0')*w[i];
  }
  int c = sum%11;
  char[] ch = {'1','0','X','9','8','7','6','5','4','3','2'};
  char code = ch[c];
  //因程序中给出的最后一位为大写的'X',而用户可能输入小写x,所以如果最后一位是x,统一转成大写的进行判断。
  char last = id.charAt(17);
  last = last== 'x'?'X':last;
  return last == code;
}
}


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
哥们很厉害   研究的很深   {:soso_e179:}
回复 使用道具 举报
为什么要计算身份证号码最后一位呢?{:soso_e132:}
回复 使用道具 举报
刘正祥 发表于 2013-6-5 17:02
为什么要计算身份证号码最后一位呢?

最后一位是计算出来的,像网上的解除防沉迷软件就是这个原理。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马