IMEI(国际移动设备身份)号码是用于识别连接到网络的移动设备的唯一标识符。无论是GSM、CDMA还是卫星移动设备,每个设备都有一个独一无二的IMEI号码。这个号码通常会印在设备内部的电池组件上。用户可以通过拨打“*#06#”来查询自己设备的IMEI号码。IMEI号码是一个15位的数字,其中最后一位被称为“校验数字”,可以通过Luhn算法来识别。
Luhn算法,也称为“模10”算法,是一种简单的校验和公式,用于验证多种识别号码,如信用卡号码、IMEI号码、美国国家提供者识别号码以及加拿大社会保险号码。这个算法是由IBM科学家Hans Peter Luhn创建的。验证是通过校验校验数字来完成的。算法的步骤如下:
例如,一个移动设备的IMEI号码是354557030810924。按照Luhn算法的步骤计算:
3+1+0+4+1+0+5+1+4+0+6+0+1+6+1+0+9+4+4 = 50
50除以10的余数为0,所以上述号码是有效的。
要开发一个IMEI号码验证器应用程序,可以按照以下步骤进行:
在Imeivalidator类中编写以下代码:
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
public class Imei {
JFrame frame;
JButton button;
JTextField field;
JLabel label;
JLabel warninglabel;
Box panel;
public static void main(String[] args) {
Imei hl = new Imei();
hl.gui();
}
public void gui() {
panel = Box.createVerticalBox();
frame = new JFrame();
button = new JButton("Click");
field = new JTextField(15);
field.putClientProperty("JComponent.sizeVariant", "mini");
label = new JLabel("Enter the IMEI Number");
warninglabel = new JLabel("");
panel.add(label);
panel.add(field);
panel.add(warninglabel);
panel.add(button);
frame.getContentPane().add(BorderLayout.NORTH, panel);
frame.setVisible(true);
frame.setSize(300, 300);
button.addActionListener(new buttonAction());
}
public class buttonAction implements ActionListener {
public void actionPerformed(ActionEvent ev) {
int sum = 0;
String ImeiNo = field.getText();
if (ImeiNo.length() != 15) {
warninglabel.setText("IMEI Number should contain 15 characters");
} else {
boolean errorflag = false;
for (int i = 0; i <= 14; i++) {
char c = ImeiNo.charAt(i);
int number = c;
if (number < 48 || number > 57) {
warninglabel.setText("Enter only numerals");
errorflag = true;
break;
} else {
switch (number) {
case 48: number = 0; break;
case 49: number = 1; break;
case 50: number = 2; break;
case 51: number = 3; break;
case 52: number = 4; break;
case 53: number = 5; break;
case 54: number = 6; break;
case 55: number = 7; break;
case 56: number = 8; break;
case 57: number = 9; break;
}
if ((i + 1) % 2 == 0) {
number = number * 2;
number = number / 10 + number % 10;
}
sum = sum + number;
}
}
if (!errorflag) {
if (sum % 10 == 0) {
warninglabel.setText("Valid");
} else {
warninglabel.setText("Invalid");
}
}
}
}
}
}