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

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

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

  1. 通过身份证号判断是否合法、省份、性别、出生日期、生肖、星座

    由于这个代码有点长,我就不放这里了.要具体代码的可以打开下面这个链接 https://blog.csdn.net/weixin_61961580/article/details/124131596?s ...

  2. 根据身份证号判断性别、年龄、生日

    根据身份证号判断证件持有人的性别.年龄.生日.废话不多说,直接上代码. public class IdentifyCard {private static final Integer[] ODD_NU ...

  3. 身份证号与统一社会信用代码的校验

    身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...

  4. 小程序正则验证 身份证号、统一社会信用代码

    公共方法封装 // util.js页面,封装的公共方法/*** 去掉字符串头尾空格*/ function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, ...

  5. 身份证号判断性别和地区

    18位身份证号中第一位代表地区代码,其中1是华北,2是东北,3是华东,4是中南,5是西南,6是西北:第十七位表示性别,偶数为女性,奇数为男性. 请输入一个身份证号,并判断其是否为华北地区的一名女性. ...

  6. 【Kay】HQL利用身份证号判断性别

    利用身份证号去判断性别(18位身份证的倒数第二位偶数为女,奇数为男.15位身份证的倒数第一位偶数为女,奇数为男) HQL实现代码: SELECT name, CASE WHEN LENGTH(id) ...

  7. python学习之根据身份证号判断所属省份、生日、性别、星座、生肖属相

    通过个人身份证号码,利用python字符串分割和简单逻辑判断的方式,计算出所属省份.生日.性别.星座.生肖属相等信息. 这里直接贴代码了,喜欢的可以参考.具体归属地只做了省份,其他地市太多没做处理. ...

  8. 根据身份证号判断性别、生日(excel表格,公式)

    18位的看倒数第二位,奇男偶女: 15位的看倒数第一位,奇男偶女. 假如:身份证所在的列为C2 首先要判断该身份证的长度,在excel中使用len函数来获取len(C2) 如果是18位的就取第17位, ...

  9. js中通过身份证号判断性别(倒数第二位奇数-男,偶数-女)

    //通过身份证号,判断性别 var str2 = '110123199810103726'; var num = str2.charAt(16); //console.log(num); if(num ...

  10. mysql 用身份证号判断年龄

    要使用 MySQL 计算出一个人的年龄根据其身份证号,您需要以下步骤: 在 MySQL 中存储该人的身份证号和出生日期. 使用 MySQL 的函数 YEAR() 和 DATEDIFF() 计算出生日期 ...

最新文章

  1. 马斯克说,特斯拉最新自动驾驶芯片性能是英伟达的7倍​
  2. linux 跟阿铭学linux
  3. JAVA命令行编译及运行
  4. 使用Project Lombok是否安全? [关闭]
  5. 关于量子计算机 (3)
  6. 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...
  7. Concrete Mathematics A Foundation for Computer Science
  8. MOSS 2010:Visual Studio 2010开发体验(32)——工作流开发最佳实践(四):可重用工作流...
  9. [HNOI2010]PLANAR
  10. c#利用反射Assembly 对类和成员属性进行操作
  11. python零基础编程入门先学什么_零基础怎么学Python编程,新手常犯哪些错误
  12. c#操作txt文本之查询
  13. c# RoundUp函数
  14. php的parent_php中parent::是如何使用的?
  15. 实录丨戴琼海:深度学习遭遇瓶颈,全脑观测启发下一代AI算法
  16. LCD12864液晶显示
  17. python怎么画三维函数图像_python中如何画三维的图形?
  18. 浪潮森林防火智能监控解决方案
  19. 数通 | 某些基本知识梳理
  20. 没事儿薅薅 CSDN 羊毛,它不香吗?

热门文章

  1. 树莓派4b 调整屏幕分辨率
  2. Adobe Acrobat 裁剪pdf
  3. 霍夫丁不等式、马尔科夫不等式证明
  4. 书海觅珍 遨游古今——广西国正书吧正式运营开业
  5. 解决无法从Git官网下载Git安装包的具体方法
  6. Mac中设置右键新建TXT文件
  7. 微信指纹锁原理及安全性分析
  8. 怎么样绘制简易地图,如何制作一个电子地图?
  9. 机器学习可以应用在哪些场景?机器学习有什么用?
  10. ppt背景图片计算机教学知识,数学课件ppt背景图片