Android 10及以上版本如何校验IMEI号码并获取布尔校验结果
Android 10及以上版本IMEI校验方案
- 首先明确系统能力边界:Android 10(API 29)开始系统收紧了硬件标识符权限,非系统特权应用、无运营商特殊权限的普通第三方App,既无法通过公开API读取设备真实IMEI,也不存在系统提供的公开机制可以直接校验输入IMEI与设备真实IMEI是否匹配,自然拿不到系统返回的这类匹配校验布尔值。
- 如果你的需求是校验用户输入的IMEI字符串本身是否符合IMEI合法编码规范,完全可以自行实现标准校验逻辑,最终返回
true/false类型的布尔结果。
IMEI的固定编码规则为15位纯数字,最后1位是通过Luhn(模10)算法计算得到的校验位,直接按规则实现校验即可,可直接参考以下实现代码:
fun isValidImei(input: String?): Boolean { // 基础格式校验:非空、15位长度、全数字 if (input.isNullOrBlank() || input.length != 15) return false if (!input.all { it.isDigit() }) return false var checkSum = 0 for (index in input.indices) { var num = input[index].digitToInt() // 奇数索引位(从0计数,对应从左数偶数位)数值乘2 if (index % 2 == 1) { num *= 2 if (num > 9) num -= 9 } checkSum += num } // 校验和被10整除即为符合规则的IMEI格式 return checkSum % 10 == 0 }
注意:上述逻辑仅能校验输入字符串是否符合IMEI编码规则,无法验证该IMEI是否为某台设备的真实标识,也无法绕过Android 10+的系统权限限制获取设备真实IMEI做匹配校验。
内容的提问来源于stack exchange,提问作者sarjeet singh
相关产品推荐
相关产品推荐

