我正在尝试使用下面的代码验证IMEI编号,用户将在页面上输入其编号,然后使用转换为long的字符串运行isValidIMEI
。
现在这确实适用于我遇到的几乎所有IMEI,但是对于一些iPhone 5,它们的前导0,例如0133xxxxxxxxxx0。当将其强制转换为长整数时,前导0丢失,因此它变为14位数字并失败,如果我关闭长度检查器,此操作仍将不起作用,因为它将使错误的数字翻倍。
有什么主意我可以转换为某种数字格式,但保持前导0?
/**
* Sum digits
*
* @param n
* @return
*/
private static int sumDig(int n)
{
int a = 0;
while (n > 0)
{
a = a + n % 10;
n = n / 10;
}
return a;
}
/**
* Is valid imei
*
* @param n
* @return
*/
public boolean isValidIMEI(long n)
{
// Converting the number into String
// for finding length
String s = Long.toString(n);
int len = s.length();
Log.v("IMEIValidation", s);
if (len != 15) {
Log.v("IMEIValidation", "Length issue");
return false;
}
int sum = 0;
for (int i = len; i >= 1; i--)
{
int d = (int)(n % 10);
// Doubling every alternate digit
if (i % 2 == 0)
d = 2 * d;
// Finding sum of the digits
sum += sumDig(d);
n = n / 10;
}
Log.v("IMEIValidation", String.valueOf(sum));
Log.v("IMEIValidation", String.valueOf(sum % 10));
return (sum % 10 == 0);
}