📄 test.java
字号:
/**
*@身份证15位转18位
*@版本1.0
*@2006年4月16日
*@小刘制作
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
public class test extends Applet implements ActionListener
{
//定义组件
String str;
JButton btn1,btn2;
JPanel p1,p2,p3,p4;
JTextField text;
JLabel j0,j1,j2,j3,j4,j5,j6,j7,j8,j9;
boolean rad=true;
//在init函数里排版
public void init()
{
p1=new JPanel();
p2=new JPanel();
p3=new JPanel();
p4=new JPanel();
text=new JTextField(20);
btn1=new JButton("转换");
btn2=new JButton("重新输入");
j0=new JLabel("15位身份证号");
j1=new JLabel("18位身份证号");
j2=new JLabel("出生日期");
j3=new JLabel("性别");
j4=new JLabel("提示信息");
j5=new JLabel("身份证号15位到18位转换");
j6=new JLabel(" ");
j7=new JLabel(" ");
j8=new JLabel(" ");
j9=new JLabel(" ");
p1.setLayout(new FlowLayout());
p1.add(j5);
p2.setLayout(new GridLayout(5,5,80,40));
p2.add(j0);p2.add(text);p2.add(j1);p2.add(j6);
p2.add(j2);p2.add(j7);p2.add(j3);p2.add(j8);
p2.add(j4);p2.add(j9);
p3.setLayout(new GridLayout());
p3.add(btn1);p3.add(btn2);
this.setBackground(Color.lightGray);
p4.setLayout(new BorderLayout());
p4.add(p1,BorderLayout.NORTH);
p4.add(p2,BorderLayout.CENTER);
p4.add(p3,BorderLayout.SOUTH);
add(p4);
//对两个按钮进行监听
btn1.addActionListener(this);
btn2.addActionListener(this);
}
//对监听到的事件进行处理
public void actionPerformed(ActionEvent e)
{
//如果"转换按钮"被按下
if(e.getSource().equals(btn1))
{
btn1.setEnabled(false);
rad=true;
while(rad)
{
str=text.getText();
//把字符串的长度赋给整型len
int len=str.length();
//判断字符串是否为15
if(len>15||len<15)
{
j9.setForeground(Color.red);
j9.setText("错误-数目不对");
rad=false;
break;
}
//判断字符串里是否有非法字符
for(int i=0;i<len;i++)
{
try
{
Integer.parseInt("" + str.charAt(i));
}
catch(NumberFormatException ev)
{
j9.setForeground(Color.red);
j9.setText("错误-非法字符");
rad=false;
break;
}
}
//调用转换函数
this.Conversion(str);
rad=false;
}
}
//如果按钮"重新输入被按下",则清除掉文本框内容及所有标签的内容
if(e.getSource().equals(btn2))
{
btn1.setEnabled(true);
text.setText(null);
j6.setText("");j7.setText("");
j8.setText("");j9.setText("");
}
}
//转换功能在此函数实现
public void Conversion(String number)
{
int Sex=0;
//用substring方法,把世纪数加入15位身份证号码中,得到17位(不考虑20世纪的小朋友)
String num1 = number.substring(0, 6) + 19 + number.substring(6,15);
//显示出生年月
try
{
j7.setText("19"+num1.charAt(8)+num1.charAt(9)+"年"+num1.charAt(10)
+num1.charAt(11)+"月"+num1.charAt(12)+num1.charAt(13)+"日");
}
catch(NumberFormatException ev){}
//把身份证号的第16位提取出来
try
{
Sex=Integer.parseInt(""+num1.charAt(16));
}
catch(NumberFormatException ev){}
//如果Sex是奇数就是个GG,反之则是MM
if(Sex/2==0)
{
j8.setText("是个MM");
}
else
{
j8.setText("是个GG");
}
int num2=0;
//把17位号码从高位到低位与下列17个数字分别相乘求和得到num2
int ary[]=new int[]{2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7};
for(int i=16,j=0;j<17;i--,j++)
{
try
{
int ai = Integer.parseInt("" + num1.charAt(i));
num2=num2+ai*ary[j];
}
catch(NumberFormatException ev){}
}
//再将num2除11的到的余数赋给r
int r=num2%11;
String t;
//这个不用我说了吧
switch(r)
{
case 0:t="1";break;case 1:t="0";break;case 2:t="X";break;case 3:t="9";break;
case 4:t="8";break;case 5:t="7";break;case 6:t="6";break;case 7:t="5";break;
case 8:t="4";break;case 9:t="3";break;case 10:t="2";break;
}
//把r添加到num1得到最终的18位身份证号
String Number = num1+r;
//显示18位身份证号
j6.setText(Number);
j9.setForeground(Color.blue);
j9.setText("转换成功");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -