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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值