IMEI

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Пример IMEI, отображённого на экране телефона

IMEI (англ. International Mobile Equipment Identity  — международный идентификатор мобильного оборудования) — число (обычно 15-разрядное в десятичном представлении), уникальное для каждого использующего его аппарата. Применяется в сотовых телефонах сетей GSM, WCDMA и IDEN, а также в некоторых спутниковых телефонах.

Общие сведения[править | править исходный текст]

IMEI присваивается телефону во время изготовления на заводе. Он служит для идентификации устройства в сети и хранится в прошивке аппарата. Как правило, IMEI указывается в четырёх местах: в самом аппарате (в большинстве случаев его можно вывести на экран набором *#06# на клавиатуре), под аккумуляторной батареей, на упаковке и в гарантийном талоне. IMEI играет роль серийного номера аппарата и передаётся в эфир при авторизации в сети. Также IMEI используется для слежения за аппаратами и блокирования краденых телефонов на уровне оператора сотовой связи, что не позволяет в дальнейшем использовать такой аппарат в сети этого оператора, однако не мешает его использованию в других сетях. Опорная сеть GSM хранит IMEI в EIR.

В отличие от ESN и MEID, используемых в CDMA и прочих сетях, IMEI используется только для идентификации устройства и не имеет постоянного отношения к абоненту. Вместо него используется номер IMSI, хранящийся на SIM-карте, которую можно вставить в практически любой другой аппарат. Однако существуют специальные системы, позволяющие одному телефону использовать только одну определённую SIM-карту.

Модель и происхождение телефона описываются первыми 8 цифрами IMEI (так называемый TAC). Оставшаяся часть — серийный номер с контрольным числом в конце. Телефонам, поддерживающим одновременную работу с двумя SIM-картами, присваивается два номера IMEI[1].

Смена IMEI[править | править исходный текст]

В 2002 году на сайте BBC было опубликовано мнение представителей Vodafone и British Telecom о том, что IMEI телефона может быть легко изменён при помощи доступного программного обеспечения[2]. Для этого достаточно послать при помощи терминальной программы HyperTerminal (или другой аналогичной) команду «AT%IMEI=1,2,3,4,5,6,7,8,9,0,1,2,3,4,5» для чтения «AT%IMEI» или «AT%IMEI=?»[уточнить][источник не указан 1177 дней].

Фирмы-изготовители постоянно совершенствуют методы защиты программного обеспечения от изменения IMEI. В современных аппаратах IMEI хранится в однократно программируемой зоне памяти и не может быть изменён программными средствами (кроме телефонов с чипсетом MTK).[источник не указан 473 дня]

В некоторых странах, например, в Латвии, Великобритании[источник не указан 515 дней], Республике Беларусь изменение IMEI является уголовно наказуемым деянием[3]. Имеется также прецедент попытки уголовного преследования за изменение IMEI в России[источник не указан 515 дней].

Структура IMEI и IMEISV[править | править исходный текст]

IMEI (14 десятичных цифр плюс контрольная цифра) содержит информацию о происхождении, модели и серийном номере устройства. Первые 8 цифр составляют модель и место происхождения устройства, и известны как TAC (Type Approval Code). Остальная часть — определяемый производителем серийный номер аппарата, с высчитанной по алгоритму Луна контрольной цифрой в конце. До 2003 года эта цифра обязательно должна была равняться 0. Позже это правило было отменено.

IMEISV (International Mobile Terminal Identity и Software Version number) состоит из 16 цифр и обеспечивает уникальную идентификацию каждого мобильного телефона и соответствие версии программного обеспечения, инсталлированного в мобильный телефон, разрешенной оператором[4]. От версии программного обеспечения зависят услуги, доступные для мобильного аппарата, а также способность выполнить речевое кодирование, и поэтому данный параметр весьма важен[4].

По состоянию на 2004 год формат IMEI представляет собой AA-BBBBBB-CCCCCC-D, хотя он не всегда может отображаться таким образом. В IMEISV вместо одного контрольного числа используются две цифры версии программного обеспечения, поэтому IMEISV выглядит как АА-BBBBBB-CCCCCC-EE.

AA - BB BB BB - CC CC CC D или EE
Старые IMEI TAC FAC Серийный номер Контрольное число алгоритма Луна или 0 (до 2003)
Новые IMEI TAC
Старые IMEISV TAC FAC Версия программного обеспечения (SVN)
Новые IMEISV TAC

До 2002 TAC состоял только из 6 цифр, оставшиеся 2 цифры составляли код места окончательной сборки (FAC). С 1 января 2003 и до 1 апреля 2004 проходил переходной период, во время которого все коды FAC равнялись цифрам 00. В 2004 FAC прекратил своё существование, а TAC был расширен до 8 цифр.

Первые две цифры TAC — это официально зарегистрированный код RBI. RBI всегда десятичен, то есть он меньше, чем 0xA0, что позволяет легко отличать IMEI от MEID, начало которого равно или больше, чем 0xA0.

Для примера рассмотрим IMEI 35-209900-176148-1 или IMEISV 35-209900-176148-23:

TAC: 35-2099 — код британского совета по согласованию телекоммуникаций (BABT) и номер модели 2099 (Alcatel One Touch 332)
FAC: 00 — такой код значит, что телефон был сделан во время переходного периода, когда FAC был упразднён. Во время существования FAC использовались, в том числе, и следующие коды: 67 — США, 19 или 40 — Великобритания, 78 или 20 — Германия, 10 или 70 — Финляндия, 30 — Корея, 80 — Китай, 04 — Вьетнам
SNR: 176148 — серийный номер аппарата
CD: 1 — контрольное число
SVN: 23 — номер версии программного обеспечения, которое установлено на телефоне. Цифра 99 зарезервирована.

IMEI нового стиля выглядит немного по-другому: 49-015420-323751 (немецкая Nokia 3110 classic) и имеют 8-значный TAC (49-015420).

Новый идентификатор подвижного оборудования MEID, работающий в CDMA-сетях, использует тот же базовый формат, что и IMEI.

Вычисление контрольного числа[править | править исходный текст]

Способ 1.
Для расчета последней цифры IMEI необходимо:

1. Сложить все цифры в нечетных положениях;
2. Заменить цифры на четных местах по формуле и сложить их:
0=0
1=2
2=4
3=6
4=8
5=1
6=3
7=5
8=7
9=9
3. К полученному числу прибавить результат, полученный в п.1.;
4. Если полученное число равно нулю либо кратно 10, тогда контрольное число IMEI равно 0. В противном случае контрольная сумма равна числу, которое нужно прибавить к результату, чтобы получить ближайшее большее «круглое» число.

Методика расчета Check Digit на примере:
Ниже мы с Вами попробуем рассчитать контрольное число CD для IMEI=354190023896443. Для этого нам необходимо выполнить следующие операции с нашим IMEI-кодом:

1. Сложить все цифры в нечетных положениях 3,4,9,0,3,9,4 :
3+4+9+0+3+9+4 = 32
2. Заменить цифры на четных местах 5,1,0,2,8,6,4 по формуле 0=>0, 1=>2, 2=>4, 3=>6, 4=>8, 5=>1, 6=>3, 7=>5, 8=>7, 9=>9 :
5,1,0,2,8,6,4 => 1,2,0,4,7,3,8
и сложить их:
1+2+0+4+7+3+8 = 25
3. К полученному числу 25 прибавить результат 32, полученный в п.1.
25 + 32 = 57
4. "Если полученное число равно нулю либо кратно 10, тогда контрольное число IMEI равно 0" - это не этот случай...
В противном (=нашем) случае контрольная сумма равна числу, которое нужно прибавить к результату, чтобы получить ближайшее бОльшее «круглое» число (т.е. следующий целый десяток).
Следующий целый десяток = 60.
К результату 57 надо прибавить 3, чтобы получить ближайшее бОльшее «круглое» число 60.
Ответ:
Контрольное число = 3

Реализация алгоритма на языке Python:

#!/usr/bin/python
# coding:utf
 
imei = "354190023896443"
replace = {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 1, 6: 3, 7: 5, 8: 7, 9: 9}
 
even, odd = 0, 0
 
imei, crc = imei[:14], imei[14:]
for pos, i in enumerate(imei):
	if not pos & 1:
		even += int(i)
	else:
		odd += replace[int(i)]
 
iterResult = odd + even
if not iterResult or not iterResult % 10:
	controlNum = 0
else:
	maybeNum = int(round(iterResult / 10.0) * 10)
	controlNum = maybeNum - iterResult
 
print "Calculated control number:", controlNum
print "Contol number from IMEI:", crc
print "Contol number", "equals" if int(crc) == controlNum else "not equals", "calculated"

Способ 2.
1)  Удвоить значения цифр на четных позициях (5,1,0,2,8,6,4).
2)  Сложить вместе удвоенные числа на четных позициях и нечетных позициях, при этом «раскладывая» числа на четных позициях на составляющие числа (например, 14 нужно представить как 1 и 4). Получили 57
3)  Если конечное число заканчивается на 0, то CD = 0. В противном случае CD равно числу, которое нужно добавить к результату, полученному в пункте 2, чтобы получить следующий целый десяток. Следующий десяток после 57 это 60, 60-57 получаем 3. Итого контрольное число равно 3[5]

Использование в спутниковой связи[править | править исходный текст]

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]