Показано с 1 по 12 из 12

Тема: Как вычисляеться контрольная цифра?

  1. #1
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8

    Как вычисляеться контрольная цифра?

    Собственно предисловие - мне эти контрольные цифры в отчетах всю жизь портят -
    каждую симку приходиться записывать в ручную,
    хотя отличия только в порядковых номерах+ эта самая последняя цифра
    ICCID:893750105070981377 2
    для примера у Велкома
    18-ть первых цифр - порядковый номер, а 19-я чек-сумма (и не порядковая соответственно)
    В поиск и гуглю не слать -
    там только общие принципы для штрих-кодов нашел да для всяких страховых карточек - на симки ничего

  2. #2
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    досадно, что никто не может помочь , хотя если заголовки ветки почитать,
    то мы умеем всё :
    - прослушка gsm номера имея его же клона
    - Скопировать контакты без пин кода
    - сделать чтобы видеть закрытые номера
    - SIM заблокирована совсем, и все-таки прочесть контакты, если найду пин.
    ....
    и даже алгоритм аутентификации абонента в сети говорят читали ,
    ....
    а вот как считаеться эта несчастная циферка в ICCID никто и не знает ,
    или не говорит
    чур не - это эмоции ,
    уж очень достало ручками каждую симку вписывать.
    особенно , когда их в день проходит по 130 шт.

  3. #3
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    Ладно,
    вот что удалось установить, вспомнив курс математики ВУЗа :
    нечетные позиции - вычитаются от "14"
    четные - умнажаються на "8"
    всё это дело складываеться - и береться число "единиц" -
    ЭТО И БУДЕТ КОНТРОЛЬНАЯ ЦИФРА

    Пример:
    893750107010339856-8

    __1____2_____3____4__.....__16____17___18
    (14-8)+9*8+(14-3)+7*8+.....+8*8+(14-5)+6*8=
    =6+72+11+56+9+0+13+0+7+0+13+0+11+24+5+64+9+48=348
    = КОНТРОЛЬНАЯ - "ЦИСЛО ЕДИНИЦ" - "8"

    вот только попадание на некоторых массивах "+/- 1"
    и причем ДАЛЬШЕ ЧЕМ НА ЕДИНИЦУ НЕ УХОДИТ.
    если кто сможет более детально помочь - могу выслать массивы
    для анализа и обработки.
    номеров симок.

  4. #4
    Newbie
    Регистрация
    12.03.2007
    Адрес
    74
    Сообщений
    10
    Спасибо
    0
    Благодарностей: 0 : 0
    Да калькулятор из тебя ваще крутой))) и кстать скидал по твоему алгоритму симку заряботала))))

  5. #5
    Newbie
    Регистрация
    12.03.2007
    Адрес
    74
    Сообщений
    10
    Спасибо
    0
    Благодарностей: 0 : 0
    Посчитал немного и пришел к такому ответу

    icc код полностью рачитывать не стал, но контрольной цифры там на сколько я понял нету он считается следующим образом

    предпоследняя цифра и все перед ней с каждым следующим номером идет по поррядку

    допустим icc код в tele2
    89701201200018095414
    следующий будет
    89701201200018095422

    далее довольно легко считается последняя это очень просто

    89701201200018095414
    Следующяя будет
    89701201200018095422
    опять же всё очень просто
    к последней цифре добавляем 8 и получаем следующую, есть один нюанс из прибавленного считаются только единицы, а продесятки забываем их просто отбрасывают, вот тока иногда смещение идет его принцип я так и не понял если не верите копирую вам несколько реальных номеров по порядку (Я ваду реестры подключений по операторам и у меня номера и владельцы, подключавшиеся в нашей фирме тысячами лежат в эксэлевских доках)

    89701201200018181263
    89701201200018181271
    89701201200018181289
    89701201200018181297
    89701201200018181305
    89701201200018181313
    89701201200018181321
    89701201200018181339
    89701201200018181347
    89701201200018181354
    89701201200018181362
    89701201200018181370
    89701201200018181388
    89701201200018181396
    89701201200018181404
    89701201200018181412
    89701201200018181420
    89701201200018181438
    89701201200018181446
    89701201200018181453
    89701201200018181461

  6. #6
    Newbie
    Регистрация
    12.03.2007
    Адрес
    74
    Сообщений
    10
    Спасибо
    0
    Благодарностей: 0 : 0
    Еще одно если кто захочет разобрать порядок смещения выкладываю полностью таблицу с номерами 50 номеров подрят
    Вложения Вложения

  7. #7
    Newbie
    Регистрация
    24.05.2007
    Адрес
    Ростов
    Сообщений
    4
    Спасибо
    0
    Благодарностей: 0 : 0
    Цитата Сообщение от TANKeX3m
    контрольной цифры там на сколько я понял нету он считается следующим образом
    Да что за бред тут?
    По LUHN-Check она считается.

  8. #8
    Newbie
    Регистрация
    12.03.2007
    Адрес
    74
    Сообщений
    10
    Спасибо
    0
    Благодарностей: 0 : 0
    Это не бред, это полученные на практике результаты

  9. #9
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    Огромное спасибо "77"-му за оказанную помощь!!!
    да действительно алгоритм есть
    Применительно к карточкам для 19 знаков (BY VELCOM)
    прилагаю Excel-вский файлик
    В первую ячейку вводим номер сим-карты
    в соседней получаем контрольную сумму
    (номер можно вводить вместе с контрольной, а можно и без).
    Вложения Вложения

  10. #10
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    Если когото заинтересует также как и меня сама процедура вычисления,
    то с разрешения "77" я выкладываю процедуру расчета на Паскале,
    по которой можно проследить посследовательность расчетов

    Var
    Summ, Check : Byte;
    CODE : Array [1..20] of Integer;

    i, Errc : Integer;

    Function LUHNCheck(S : String) : Byte;
    Var
    Summ, DL : Byte;
    CODE : Array [1..20] of Integer;
    iLch : Integer;
    Begin
    Summ:=0;
    if Length(S) = 20 then DL:=Length(S)-1 else DL:=Length(S);
    For iLch:= 1 to DL do
    Begin
    Val(S[iLch],CODE[iLch],Errc);
    if ODD(iLch) then
    Begin
    Inc(CODE[iLch],CODE[iLch]);
    if CODE[iLch]>9 then Dec(CODE[iLch],9);
    end;
    inc(Summ,CODE[iLch]);
    end;
    if (Summ mod 10) = 0 then iLch:=0 else iLch:=10;
    LUHNCheck:=iLch-(Summ mod 10);
    end;

    Там строчка if Length(S) = 20 then DL:=Length(S)-1 else DL:=Length(S);
    для уменьшения IICCID на последнюю цифру, если передаёшь с контроьной..

    И ещё есть по IMEI аналогичная процедура

    Function IMEICheck(S : String) : Byte;
    Begin
    Summ:=0;
    For i:= 1 to 14{Length(S){-1} do
    Begin
    Val(S[i],CODE[i],errc);
    if not odd(i) then
    Begin
    Inc(CODE[i],CODE[i]);
    if CODE[i]>9 then Dec(CODE[i],9);
    end;
    Inc(Summ,CODE[i]);
    end;
    if (Summ mod 10) = 0 then i:=0 else i:=10;
    IMEICheck:=i-(Summ mod 10);
    end;

  11. #11
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    а эт ещё нашел с пояснениями все того же 77-го

    For iLch:= 1 to DL do {в цикле, по порядку с первой до последней цифры ICCID над каждой выполняем:}
    Begin

    if ODD(iLch) then {если это по счёту (по порядку) нечётная позиция ICCID, то:}
    Begin
    Inc(CODE[iLch],CODE[iLch]); {удваиваем её (умножаем на два)}
    if CODE[iLch]>9 then Dec(CODE[iLch],9); {затем если она БОЛЬШЕ девяти, то отнимаем от неё 9}
    end;
    inc(Summ,CODE[iLch]); {теперь, неважно, какая она была, чётная или нечётная по счёту, добавляем её к заранее, до всего цикла обнулённой некоей переменной}
    end;
    {теперь, когда прошлись таким образом, по всем цифрам ICCID и получили некое Summ:}
    if (Summ mod 10) = 0 then iLch:=0 else iLch:=10; {}
    LUHNCheck:=iLch-(Summ mod 10); {контрольная цифра будет являться остатком от деления на десять}

    Собственно, всё (-:

    -
    77 (21:17:12 4/05/2007)
    Вот тут нюанс:
    if (Summ mod 10) = 0 then iLch:=0 else iLch:=10; {если Summ делится на 10 без остатка, то некоей переменной (просто я iLch использую два раза - она более там не нужна) писваиваем 0, а если делится с остатком, то присваиваем ей 10. Нахрена - не помню, но писал это я сам. Так что сейчас буду напрягаться, чтобы вспомнить, нахрена это всё именно так}
    LUHNCheck:=iLch-(Summ mod 10); {контрольная цифра будет являться разницой от iLch и остатком от деления Summ на десять}



    to TANKeX3m - ты не прав!

  12. #12
    Member
    Регистрация
    21.03.2004
    Адрес
    РБ
    Сообщений
    186
    Спасибо
    4
    Благодарностей: 15 : 8
    и на закуску - выдержки из стандарта
    по вычислению контрольной суммы

    02. How do I determine if I have a valid credit card number?

    Credit cards use the Luhn Check Digit Algorithm. The main purpose of
    this algorithm is to catch data entry errors, but it does double duty
    here as a weak security tool.

    For a card with an even number of digits, double every odd numbered
    digit and subtract 9 if the product is greater than 9. Add up all the
    even digits as well as the doubled-odd digits, and the result must be
    a multiple of 10 or it's not a valid card. If the card has an odd
    number of digits, perform the same addition doubling the even numbered
    digits instead.

Похожие темы

  1. Ответов: 3
    Последний ответ: 04.08.2007, 10:41
  2. контрольная сумма IMSI
    от _Vladdd в разделе SIM-Card
    Ответов: 11
    Последний ответ: 09.03.2006, 13:34
  3. Контрольная сумма FCS-16
    от MaxKap в разделе CDMA800 & TDMA
    Ответов: 8
    Последний ответ: 12.01.2005, 10:02

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  Рейтинг@Mail.ru