Я пытаюсь проверить номера IMEI с помощью приведенного ниже кода, пользователь вводит их номер на странице, а затем запускает 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);
}