验证身份证号码的合法性(对“清华大学出版社”出版的 “Java程序设计与应用开发(第2版)”中关于身份证号码合法性验证代码错误的修正)
import javax.swing.JOptionPane;//导入swing包中的JOptionPane类
public class Identity {
public static void main(String[] args) {
String ID;
int year,month,day,lent,province;//身份证号码中对应的出生年月日及长度和省份
ID=JOptionPane.showInputDialog("Input you ID");
//判断输入的号码长度是否合法,如果长度不合法,警告提示
lent=ID.length();
if(lent!=18) {
JOptionPane.showMessageDialog(null,"The length of you ID inputed is error!","Warning",0); return ; }
/**
* 省,直辖市代码表: { 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:"国外"}
*/
//从ID中获得省份,出生年月日
province=Integer.parseInt(ID.substring(0,2));
year=Integer.parseInt(ID.substring(6,10));
month=Integer.parseInt(ID.substring(10,12));
day=Integer.parseInt(ID.substring(12,14));
int array[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义数组array用于各月份最大天数的合法性判断
if(province<=00||province>=51)
JOptionPane.showMessageDialog(null, "The province code inputed is error!","Warning",0);//判断省份是否在合法范围内
else if(year<1900||year>=2013) JOptionPane.showMessageDialog(null,"The year is error!","warning",0);//判断年份是否在合法范围内
else if(month<1||month>12) JOptionPane.showMessageDialog(null,"The month is error!","warning",0);//判断月份是否在合法范围内
//判断闰年日期是否合法
else if(year%400==0||(year%4==0&&year%100!=0)) {
if(month==2&&(day>29||day<=0))
JOptionPane.showMessageDialog(null,"The day is error!","warning",0);
else
JOptionPane.showMessageDialog(null,"The ID is right!\n"+ID,"Yes",JOptionPane.PLAIN_MESSAGE);
//以上红色部分为书中所缺少的部分
}
//根据上面定义的数组判断非闰年情况下各月份生日是否合法
else if(array[month]<=day||day<=0)
JOptionPane.showMessageDialog(null,"The birthday is error!","warning",0);
else
JOptionPane.showMessageDialog(null,"The ID is right!\n"+ID,"Yes",JOptionPane.PLAIN_MESSAGE);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义