国际移动设备识别码(International Mobile Equipment Identity,IMEI),即通常所说的手机序列号、手机“串号”,用于在移动电话网络中识别每一部独立的手机等移动通信设备,相当于移动电话的身份证。序列号共有15~17位数字,前8位(TAC)是型号核准号码(早期为6位),是区分手机品牌和型号的编码。接着2位(FAC)是最后装配号(仅在早期机型中存在),代表最终装配地代码。后6位(SNR)是串号,代表生产顺序号。
–百度百科
由上面的IMEI的说明可知IMEI是15或17位的数字组成,所以要判断一个字符串是否为IMEI可以用下面的正则表达去匹配
全字符串匹配:
^[\d]{15}(?:[\d]{2})?$
搜索匹配的正则表达(不同就是去掉头尾的^,$
):
[\d]{15}(?:[\d]{2})?
下面是JUnit测试代码
package net.facelib.authkernel;
import static org.junit.Assert.*;
import org.junit.Test;
public class ImeiTest {
private static boolean testImei(String imei){
if(imei != null){
System.out.printf("[%s] %s IMEI\n", imei,imei.matches("^[\\d]{15}(?:[\\d]{2})?$") ? "IS" : "IS NOT");
}
return false;
}
@Test
public void test() {
// 随机字符串
testImei("adsf;asldkfj;sadfkj");
// 10 位无效数字
testImei("1234567890");
// 15 位IMEI
testImei("123456789012345");
// 16 位无效数字
testImei("1234567890123456");
// 17 位IMEI
testImei("12345678901234567");
// 18 位无效数字
testImei("1234567890123458");
}
}
[adsf;asldkfj;sadfkj] IS NOT IMEI
[1234567890] IS NOT IMEI
[123456789012345] IS IMEI
[1234567890123456] IS NOT IMEI
[12345678901234567] IS IMEI
[1234567890123458] IS NOT IMEI