首先我们先了解一下统一社会信用代码的算法
了解完算法后我们需要在idea中下载一个叫JForm的插件
下好之后我们新建一个JForm的项目
设计一个界面大概如下:
然后会自动生成一个类,然后我们在类里面操作
首先我们需要设计一个title
在开头位置更改代码
public class Credit extends JFrame {
public Credit(String title) {
super(title);
initComponents();
}
然后找到我们的ok按钮
通过下面代码在下面添加事件
okButton.addActionListener(this::checkCardNum);
然后alt+回车会自动生成一个方法
然后我们找到方法,在方法中写我们的代码
private void checkCardNum(ActionEvent actionEvent) {
String cardNum = textField1.getText();
if ("".equals(cardNum)) {
textArea1.setText("");
return;
}
if (cardNum.length() != 18) {
textArea1.setText("代码长度不正确");
return;
}
if (CardUtils.checkCard(cardNum)) {
textArea1.setText("代码正确");
return;
} else textArea1.setText("代码错误");
return;
其中的CardUtils也是同样的alt+回车生成一个类,我们来写算法
public class CardUtils {
public static boolean checkCard(String cardNum) {
int[] w = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};
int sum = 0;
for (int i = 0; i < w.length; i++) {
int a = toNumByChar(cardNum.charAt(i));
int b = w[i];
sum += b * a;
}
int r = 31 - sum % 31;
int l = toNumByChar(cardNum.charAt(17));
return r == l;
}
public static int toNumByChar(char c) {
return switch (c) {
case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' -> c - 55;
case 'J', 'K', 'L', 'M', 'N' -> c - 56;
case 'P', 'Q', 'R' -> c - 57;
case 'T', 'U' -> c - 58;
case 'W', 'X', 'Y' -> c - 59;
case 'I', 'O', 'S', 'Z', 'V' -> {
throw new RuntimeException("无法将字符" + c + "转换成对应的数字");
}
default -> c - 48;
};
}
}
然后在运行时我们会发现窗口是带水印的,只需要找到这一段删掉即可
dialogPane.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder(new javax.swing.border.EmptyBorder
(0,0,0,0), "JFor\u006dDesi\u0067ner \u0045valu\u0061tion",javax.swing.border.TitledBorder.CENTER,javax.swing.border
.TitledBorder.BOTTOM,new java.awt.Font("Dia\u006cog",java.awt.Font.BOLD,12),java.awt
.Color.red),dialogPane. getBorder()));dialogPane. addPropertyChangeListener(new java.beans.PropertyChangeListener(){@Override public void
propertyChange(java.beans.PropertyChangeEvent e){if("bord\u0065r".equals(e.getPropertyName()))throw new RuntimeException()
;}});