Проверьте, возвращает ли telephonyManager.getDeviceId() значение Real или нет.

Требование

Одно устройство Android, одна учетная запись. Чтобы запретить пользователю создавать несколько учетных записей на одном устройстве.

Что я сделал

Во время входа в систему с помощью telephonyManager.getDeviceId() я получаю номер IMEI устройства Android. Затем я проверяю это со всеми номерами IMEI, хранящимися в базе данных моего сервера. Но после столкновения

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String IMEINo = telephonyManager.getDeviceId();

У меня много поддельных номеров IMEI. Например, я проверил в https://www.imei24.com "272052651704884". Результат: "Данный IMEI 272052651704884 неверен. Контрольная сумма неверна. Последняя цифра номера IMEI генерируется на основе формулы Luhna".

Проведя множество исследований, я узнал, что если вы копируете приложение, используя Parallel Space или что-то подобное, telephonyManager.getDeviceId() возвращает поддельное значение.

Спустя 7 долгих месяцев я нашел решение этой проблемы. Это алгоритм Луня, который выполняет некоторые вычисления и сообщает, действителен ли IMEI или нет.

Что мне нужно: совет о том, следует ли мне слепо полагаться на алгоритм Луня или нет.


person Prabhakar Panda    schedule 19.07.2018    source источник


Ответы (2)


Я думаю, вы должны попробовать это, это сработает. Я нашел настоящий номер IMEI с getDeviceId()

     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                if (ActivityCompat.checkSelfPermission(context,
                        Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }

                String IMEI_Number = null;
                if (telephonyManager != null) {
                    IMEI_Number = telephonyManager.getDeviceId();
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    String Imei0Id = null;
                    if (telephonyManager != null) {
                        Imei0Id = telephonyManager.getDeviceId(0);
                    }
                    if (null != Imei0Id && !Imei0Id.equals("000000000000000")) {
                        IMEI_Number = Imei0Id;
                    }


}
person Learning Always    schedule 19.07.2018
comment
Я сделал все это, но запуская приложение в параллельном пространстве, оно возвращает ложный номер IMEI. - person Prabhakar Panda; 19.07.2018

введите здесь описание изображения Используйте неизменяемый универсальный уникальный идентификатор (UUID). UUID представляет собой 128-битное значение.

UUID.randomUUID().toString()
person aswanth bonthala    schedule 30.10.2019