TelephonyManager.getDeiceId()
仅返回14位IMEI号码。
但在Setting-> Phone-> Status下显示15位数字。
我希望手机设置下显示15位数字。
答案 0 :(得分:3)
IMEI(14位)由校验位补充。校验位不是 在IMEI检查时发送的部分数字。校验位应该 避免手动传输错误,例如当客户注册被盗手机时 在运营商的客户服务台。
http://www.tele-servizi.com/Janus/texts/imei.txt
http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity
答案 1 :(得分:1)
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.getDeviceId()
这就是我所做的,我得到了所有15位数字,这可以帮助你......
答案 2 :(得分:1)
或者您可以手动计算14位IMEI号的校验和。 e.g。
private int GetCheckSumDigit(String id) {
int digit = -1;
try{
if(id.length() == 14)
{
String str = "";
char[] digits = new char[id.length()];
id.getChars(0, id.length(), digits, 0);
for(int i=0; i<digits.length; i++)
{
String ch = digits[i]+"";
if((i+1)%2==0)
{
int x = Integer.parseInt(digits[i]+"");
x *= 2;
ch = x+"";
}
str += ch;
}
digits = new char[str.length()];
str.getChars(0, str.length(), digits, 0);
int total = 0;
for(int i=0; i<str.length(); i++)
total += Integer.parseInt(digits[i]+"");
//
int count = 0;
while((total+count)%10 != 0)
count++;
digit = count;
}
}catch(Exception exx)
{
exx.printStackTrace();
}
return digit;
}
祝你好运。
答案 3 :(得分:0)
有些设备不会添加最后一位数字,我们需要使用Luhn algorithm计算最后一位数字:
private int getImeiCheckDigit(String imei14digits) {
if (imei14digits == null || imei14digits.length() != 14) {
throw new IllegalArgumentException("IMEI should be 14 digits");
}
int[] imeiArray = new int[imei14digits.length()];
final int DIVIDER = 10;
char[] chars = imei14digits.toCharArray();
for (int i = 0; i < chars.length; i++) {
imeiArray[i] = Character.getNumericValue(chars[i]);
}
int sum = 0;
for (int i = 0; i < imeiArray.length; i++) {
if (i % 2 == 0) {
sum += imeiArray[i];
} else {
int multi = imeiArray[i] * 2;
if (multi >= DIVIDER) {
sum += multi % DIVIDER;
sum += multi / DIVIDER;
} else {
sum += multi;
}
}
}
return (DIVIDER - sum % DIVIDER) % DIVIDER;
}