Изменения
IMEI
,→Алгоритм вычисления Check Digit
# Суммируем значения Шага 2 и Шага 3 (здесь, например, 14 будем считать как 14, а не 1 + 4).
# Вычитаем из ближайшего значения к числу, полученному на Шаге 4, оканчивающемуся на ноль значение, полученное на Шаге 4 — получаем значение последней пятнадцатой цифры IMEI-кода.
== Алгоритм вычисления Check Digit на языке Delphi (by n0wheremany): ==
(небольшой комментарий от n0wheremany - алгоритм отписанный выше не совсем правильный)
# Имеем 14 значный IMEI
# Получаем полный 15 значный IMEI (c Check Digit)
----
function GetFullIMEI(IMEI:string):string;
var
X:integer;
i:integer;
S:string;
begin
Result := IMEI;
// Проверка на правильно ввода
if Length(IMEI)<14 then exit;
IMEI := Copy(IMEI,1,14);
// ШАГ 1: Складываем в строку цифры IMEI таким образом:
// Все четные цифры умножаем на 2, а не четные оставляем
S := "";
for i:=1 to 14 do
if (i mod 2)=0 then
S := S + IntToStr(StrToInt(IMEI[I])*2)
else
S := S + IMEI[I];
// ШАГ 2: Складываем все полученные цифры (S) с число (X)
X := 0;
for i:=1 to Length(S) do
X := X + StrToInt(S[I]);
// ШАГ 3: Если результат сложения (X) = 0 , то CD = 0б иначе переходим к 4 шагу
if X>0 then
// ШАГ 4: Увеличиваем результат сложения в число (X) до следующего десятка и уменьшаем на результат сложения (X)
// Если результат сложения (X) = 11, то 20 - 11 = 9
// Если результат сложения (X) = 24, то 30 - 24 = 6
X := Trunc(((X div 10)+1)*10)-X;
Result := IMEI + IntToStr(X);
end;