java:正则表达式匹配IMEI(15或17位)

国际移动设备识别码(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

Guess you like

Origin blog.csdn.net/10km/article/details/109852345