身份证号判断是否合法(具体代码)

news/2024/11/23 0:33:18/

 通过身份证号判断是否合法、省份、性别、出生日期、生肖、星座的具体代码:

import java.util.Calendar;
import java.util.Scanner;public class Idcard {public static void main(String[] args) {yixuewen();}/*根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。1-2位:前两位代表各省级政府的代码。3-4位:3-4位代表地、市级政府代码。5-6位:5-6位代表县、区级政府代码。*/
/*校验码计算方法
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。
*(即余数0对应1,余数1对应0,余数2对应X...)
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。
*如果对应的数字是2,身份证的最后一位号码就是罗马数字X。
*/	
private static final int[] weight=new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
/*前面的身份证号码17位数分别乘以的系数:* 从第一位到第十七位的系数分别为:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。*/
private static final int[] checkDigit=new int[]{1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };//对应的校验码,判断身份证最后一位数字
public static void yixuewen(){Scanner sc=new Scanner(System.in);//键盘录入String id;//定义字符串型IDint arr[]=new int[18];//创建数组int sum=0;   //定义整数类型变量sum将这17位数字和系数相乘的结果相加int flag=0;  //定义整数类型变量flag存储余数System.out.println("请输入身份证号码:");id=sc.next();//判断身份证是否合法for(int a=0;a<3;a++);{while(id.matches("^\\d{17}[0-9X]$")==false){
//String.matches() 这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false
//正则表达式定义:用一些特殊符号表达一些有规律的式子//身份证:18数字  最后一位可为x  // 身份证的正则表达式:/^\\d{17}[0-9x]$/System.out.println("ERROR!输入有误!请重新输入");id=sc.next();}for(int i=0;i<18;i++){arr[i]= Integer.parseInt(id.substring(i, i+1));//Integer.parseInt(String)就是将String字符类型数据转换为Integer整型数据。//使用Id.substring(i, i+1)方法可取出号码的每一位
/*
substring()
用于返回一个字符串的子串
在String中:substring(start,stop)
start:表示子字符串的开始位置,
stop:表示结束结果。
注意:第二个参数应该大于第一个参数。
*/if(i!=17){sum+=weight[i]*arr[i];  //原式:sum=sum+weight[i]*arr[i];        }}flag=sum%11;           //得出余数if(checkDigit[flag]==arr[arr.length-1]){//判断余数是否与身份证号最后一位对应System.out.println("您的身份证是合法的!");    }else{System.out.println("您的身份证是不合法的!");}}//判断省份
String code[] = { "11", "12", "13", "14", "15", "21", "22","23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43","44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63","64", "65", "71", "81", "82", "91" };String city[] = {"北京市","天津市","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海市","江苏","浙江","安徽","福建","江西","山东", "河南","湖北","湖南","广东","广西","海南","重庆市","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆","台湾","香港","澳门","国外"};
String cd=(id.substring(0,2)); //取身份证前两位
int a;
for(a=0;a<city.length;a++) {if(cd.equals(code[a])) {break;//找到对应的省份退出循环}
}
System.out.println("你输入的身份证省份为:"+city[a]);//判断性别
String gender=(id.substring(16,17));
int b=Integer.valueOf(gender);
if(b%2==0) {System.out.println("你输入的身份证号的人的性别是:女性");
}
else System.out.println("你输入的身份证号的人的性别是:男性");//判断出生日期
String year =id.substring(6,10);
String month=id.substring(10,12);
String day=id.substring(12,14);
System.out.println("你输入的身份证号的人的出生日期为:"+year+"年"+month+"月"+day+"日");//判断年龄
String birthday =id.substring(6,14);
Calendar now = Calendar.getInstance();
/*使用Calendar.getInstance()不仅能获取当前的时间* 还能指定需要获取的时间点* 并可以进行时间的计算*/
int nowYear = now.get(Calendar.YEAR);
int nowMonth = (now.get(Calendar.MONTH)+1);
/**指示月份的 get 和 set 的字段数字*因为这个值的初始值是0*因此我们要用它来表示正确的月份时就需要加1*/
int nowDay = now.get(Calendar.DAY_OF_MONTH);
/** get 和 set 的字段数字,指示一个月中的某天。* 它与 DAY_OF_MONTH 是同义词。* 一个月中第一天的值为 1。* 根据定义我们可以知道* 这个值取得后不需要做任何变更就是程序需要的值*/int year1 = Integer.valueOf(birthday.substring(0,4));
int month1= Integer.valueOf(birthday.substring(4,6));
int day1 = Integer.valueOf(birthday.substring(6));
/*Integer.valueOf()将基本类型int转换为包装类型Integer
*或者将String转换成Integer,String如果为Null或“”都会报错。
*Integer.valueOf()是Integer类的一个静态方法,
*当括号中的变量值在-128~127之间时,其不会创建对象,而是指向现有的自动装箱的对象。
*如果没有其会自己创建一个。
*/
int age = nowYear-year1;
if(age<=0) {System.out.println("ERROR!错误!");}
else if(nowMonth-month1>0) {System.out.println("你输入的身份证的人的当前年龄为:"+age);}
else if(nowMonth-month1>0) {if(nowDay-day1>=0) {System.out.println("你输入的身份证的人的当前年龄为:"+age);}}
else System.out.println("你输入的身份证的人的当前年龄为:"+(age-1));//判断生肖
int year2 = Integer.valueOf(birthday.substring(0,4));
String zodia[]={"子鼠","丑牛","寅虎","卯兔","辰龙","巳蛇","午马","未羊","申猴","酉鸡","戌狗","亥猪"};
int i=(year2-4)%12;
String value=zodia[i];
System.out.println("你输入的身份证的人的生肖为:"+value);//判断星座
int month2= Integer.valueOf(birthday.substring(4,6));
int day2 = Integer.valueOf(birthday.substring(6));
String value1="";if(((month2==3)   && (day2 >=21)) || ((month2==4)  &&(day2<=19))) value1="白羊座";
if(((month2==4)   && (day2 >=20)) || ((month2==5)  &&(day2<=20))) value1="金牛座";
if(((month2==5)   && (day2 >=21)) || ((month2==6)  &&(day2<=21))) value1="双子座";
if(((month2==6)   && (day2 >=22)) || ((month2==7)  &&(day2<=22))) value1="巨蟹座";
if(((month2==7)   && (day2 >=23)) || ((month2==8)  &&(day2<=22))) value1="狮子座";
if(((month2==8)   && (day2 >=23)) || ((month2==9)  &&(day2<=22))) value1="处女座";
if(((month2==9)   && (day2 >=23)) || ((month2==10) &&(day2<=23))) value1="天秤座";
if(((month2==10)  && (day2 >=24)) || ((month2==11) &&(day2<=22))) value1="天蝎座";
if(((month2==11)  && (day2 >=23)) || ((month2==12) &&(day2<=21))) value1="射手座";
if(((month2==12)  && (day2 >=22)) || ((month2==1)  &&(day2<=19))) value1="摩羯座";
if(((month2==1)   && (day2 >=20)) || ((month2==2)  &&(day2<=18))) value1="水瓶座";
if(((month2==2)   && (day2 >=19)) || ((month2==3)  &&(day2<=20))) value1="双鱼座";System.out.println("你输入的身份证的人的星座为:"+value1);
}}


http://www.ppmy.cn/news/503055.html

相关文章

身份证号的奥秘

第1关:判断性别 通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。 本关任务:输入身份证号,第17位若是偶数,输出男性,否则输出女性 if eval(sfzh[16])%2==0: print("女性") else: print

身份证号码的校验

身份证号码的校验的计算方法: 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2; 2、将这17位数字和系数相乘的结果相加; 3、用加出来和除以11&#xff0c;看余数是多少; 4、余数只可能有…

python-身份证号处理

18位身份证号码&#xff1a;第7、8、9、10位为出生年份(四位数)&#xff0c;第11、第12位为出生月份&#xff0c;第13、14位代表出生日期&#xff0c;第17位代表性别&#xff0c;奇数为男&#xff0c;偶数为女。 用户输入一个合法的身份证号&#xff0c;请输出用户的出生年月日…

python基础经典问题-判断身份证号码是否有效

输入一个身份证号&#xff0c;判断其是否有效&#xff1a; 若不为18位&#xff0c;提示“长度错误”&#xff1b; 若前17位不为数字&#xff0c;提示“有无效字符”&#xff1b; 最后一位为校验码&#xff0c;若错误&#xff0c;提示”校验码错误”&#xff0c; 若校验码正确&a…

php 判断身份证号是否正确

public function validateIDCard($idcard) {if(empty($idcard)){return 错误身份证;}else{$idcard strtoupper($idcard); # 如果是小写x,转化为大写Xif(strlen($idcard) ! 18 && strlen($idcard) ! 15){return 错误身份证;}# 如果是15位身份证&#xff0c;则转化为18位…

身份证号校验

//身份证号校验 function isIDCard(card){if (card ) {console.log(请输入身份证号&#xff0c;身份证号不能为空);return false;}if (isCardNo(card) false) {console.log(您输入的身份证号码不正确);return false;}//检查省份// if (checkProvince(card, city) false) {//…

验证身份证号码:

将18 位身份证的前17 位&#xff0c;对应乘以以下值&#xff08;7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2&#xff09;&#xff0c; 并累加这些乘积为s&#xff0c;将s 对11 求余&#xff0c;结果为0-10&#xff0c;对应的末尾验证码为(1, 0, X, 9, 8,7, 6, 5, 4,…

Python验证身份证号码是否有效

判断其是否有效 若不为18位&#xff0c;提示“长度错误”若前17位不为数字&#xff0c;提示“有无效字符”最后一位为校验码&#xff0c;若错误&#xff0c;提示”校验码错误”&#xff0c; 若校验码正确&#xff0c;提示“校验码正确” 校验码产生规则 身份证校验码产生的…