最严格的Java代码身份验证
来源:互联网 发布:js保存cookie 编辑:程序博客网 时间:2024/06/08 14:27
import java.util.Date;
/**
* 校验身份证号码是否有效
*
* @author HUXIAOCHAO
*/
public class CheckCertificateNo {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
String certificateNo = "14270319950904";//身份证号码
if(certificateNo.length() == 15){
System.err.println("身份证号码无效,请使用第二代身份证!!!");
}else if(certificateNo.length() == 18){
String address = certificateNo.substring(0,6);//6位,地区代码
String birthday = certificateNo.substring(6,14);//8位,出生日期
String sequenceCode = certificateNo.substring(14,17);//3位,顺序码:奇为男,偶为女
String checkCode = certificateNo.substring(17);//1位,校验码:检验
System.out.println("身份证号码:"+certificateNo+"、地区代码:"+address+"、出生日期:"+birthday+"、顺序码:"+sequenceCode+"、校验码:"+checkCode+"\n");
String [] provinceArray = {"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:国外"};
boolean valideAddress =false;
for (int i = 0; i < provinceArray.length; i++) {
String provinceKey =provinceArray[i].split(":")[0];
if (provinceKey.equals(address.substring(0,2))){
valideAddress = true;
}
}
if (valideAddress) {
String year = birthday.substring(0,4);
String month =birthday.substring(4,6);
String day =birthday.substring(6);
Date tempDate = new Date(Integer.parseInt(year),Integer.parseInt(month)-1,Integer.parseInt(day));
if((tempDate.getYear()!=Integer.parseInt(year)|| tempDate.getMonth()!=Integer.parseInt(month)-1 || tempDate.getDate()!=Integer.parseInt(day))){//避免千年虫问题
System.err.println("身份证号码无效,请重新输入!!!");
}else{
int [] weightedFactors = { 7, 9, 10, 5, 8, 4, 2,1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };//加权因子
int [] valideCode = { 1, 0, 10, 9, 8, 7, 6, 5,4, 3, 2 };//身份证验证位值,其中10代表X
int sum = 0;//声明加权求和变量
String []certificateNoArray =new String[certificateNo.length()];
for (int i = 0; i < certificateNo.length(); i++) {
certificateNoArray[i] =String.valueOf(certificateNo.charAt(i));
}
if ("x".equals(certificateNoArray[17].toLowerCase())) {
certificateNoArray[17] ="10";//将最后位为x的验证码替换为10
}
for (int i = 0; i < 17; i++) {
sum += weightedFactors[i]* Integer.parseInt(certificateNoArray[i]);//加权求和
}
int valCodePosition = sum % 11;//得到验证码所在位置
if (Integer.parseInt(certificateNoArray[17])== valideCode[valCodePosition]) {
String sex = "男";
if(Integer.parseInt(sequenceCode)%2==0){
sex = "女";
}
System.out.println("身份证号码有效,性别为:"+sex+"!");
} else {
System.err.println("身份证号码无效,请重新输入!!!");
}
}
} else {
System.err.println("身份证号码无效,请重新输入!!!");
}
}else{
System.err.println("非身份证号码,请输入身份证号码!!!");
}
}
}
/**
* 校验身份证号码是否有效
*
* @author HUXIAOCHAO
*/
public class CheckCertificateNo {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
String certificateNo = "14270319950904";//身份证号码
if(certificateNo.length() == 15){
System.err.println("身份证号码无效,请使用第二代身份证!!!");
}else if(certificateNo.length() == 18){
String address = certificateNo.substring(0,6);//6位,地区代码
String birthday = certificateNo.substring(6,14);//8位,出生日期
String sequenceCode = certificateNo.substring(14,17);//3位,顺序码:奇为男,偶为女
String checkCode = certificateNo.substring(17);//1位,校验码:检验
System.out.println("身份证号码:"+certificateNo+"、地区代码:"+address+"、出生日期:"+birthday+"、顺序码:"+sequenceCode+"、校验码:"+checkCode+"\n");
String [] provinceArray = {"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:国外"};
boolean valideAddress =false;
for (int i = 0; i < provinceArray.length; i++) {
String provinceKey =provinceArray[i].split(":")[0];
if (provinceKey.equals(address.substring(0,2))){
valideAddress = true;
}
}
if (valideAddress) {
String year = birthday.substring(0,4);
String month =birthday.substring(4,6);
String day =birthday.substring(6);
Date tempDate = new Date(Integer.parseInt(year),Integer.parseInt(month)-1,Integer.parseInt(day));
if((tempDate.getYear()!=Integer.parseInt(year)|| tempDate.getMonth()!=Integer.parseInt(month)-1 || tempDate.getDate()!=Integer.parseInt(day))){//避免千年虫问题
System.err.println("身份证号码无效,请重新输入!!!");
}else{
int [] weightedFactors = { 7, 9, 10, 5, 8, 4, 2,1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };//加权因子
int [] valideCode = { 1, 0, 10, 9, 8, 7, 6, 5,4, 3, 2 };//身份证验证位值,其中10代表X
int sum = 0;//声明加权求和变量
String []certificateNoArray =new String[certificateNo.length()];
for (int i = 0; i < certificateNo.length(); i++) {
certificateNoArray[i] =String.valueOf(certificateNo.charAt(i));
}
if ("x".equals(certificateNoArray[17].toLowerCase())) {
certificateNoArray[17] ="10";//将最后位为x的验证码替换为10
}
for (int i = 0; i < 17; i++) {
sum += weightedFactors[i]* Integer.parseInt(certificateNoArray[i]);//加权求和
}
int valCodePosition = sum % 11;//得到验证码所在位置
if (Integer.parseInt(certificateNoArray[17])== valideCode[valCodePosition]) {
String sex = "男";
if(Integer.parseInt(sequenceCode)%2==0){
sex = "女";
}
System.out.println("身份证号码有效,性别为:"+sex+"!");
} else {
System.err.println("身份证号码无效,请重新输入!!!");
}
}
} else {
System.err.println("身份证号码无效,请重新输入!!!");
}
}else{
System.err.println("非身份证号码,请输入身份证号码!!!");
}
}
}
1 0
- 最严格的Java代码身份验证
- 严格的身份验证
- 最严格的身份证校验(Java版)
- 最严格的身份证校验(Java版)
- Shiro身份验证最详细的代码流转分析
- 2.6 Android 代码的严格检查
- Java严格校验日期的正确性
- java 有严格的区分大小写制度
- 推进水资源信息化建设 落实最严格的水资源管理制度
- 最严格的身份证校验(JavaScript版)
- [评论]为什么谷歌要执行严格的代码编写规范
- 为什么谷歌要执行严格的代码编写规范
- 为什么Google要执行严格的代码编写规范
- [评论]为什么谷歌要执行严格的代码编写规范
- 为什么谷歌要执行严格的代码编写规范
- 为什么谷歌要执行严格的代码编写规范
- 为什么谷歌要执行严格的代码编写规范
- 为什么谷歌要执行严格的代码编写规范
- Problem C: 默认参数:求圆面积
- 初识Makefile
- [python]在ubuntu下使用matplotlib绘图---问题
- 《PCL点云库学习&VS2010(X64)》Part 31 pcl::PointCloud::Ptr和pcl::PointCloud相互转换
- Windows bat脚本for循环之二
- 最严格的Java代码身份验证
- POJ 3087 Shuffle'm Up(模拟)
- spring(spring-boot) + mybatis多数据源
- linux进程/线程协作 之 epoll
- CENTOS7下安装MANTIS
- ABAP面向对象的开发
- LCD及FrameBuffer驱动(三)---------------------驱动和应用程序的编写
- Hadoop常用操作指令和Hadoop集群配置
- Android事件分发06——事件分发流程图总结