Проверка IMEI java конвертирует строку в долго теряющуюся ведущую 0 - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь проверить номера 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);
}
...