За последние 24 часа нас посетили 18103 программиста и 1651 робот. Сейчас ищут 1616 программистов ...

EAN-8, UCC-12 (UCC-A), EAN-13 и EAN-14 (ITF-14)

Тема в разделе "Решения, алгоритмы", создана пользователем lexa, 14 мар 2010.

  1. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Я тут рядышком давно выкладывал проверялку ISBN длиной 10 и 13 символов. Вот теперь проверку штрихкодов дляя кучи. :)

    Сама система крайне простая: берём цифры, переворачиваем (разница длин в первых цифрах), срезаем первую цифру (это контрольное число; само по себе оно всегда в конце), складываем все чётные цифры, умножаем сумму на 3, складываем нечётные, складываем результат того и другого.

    Контрольную сумму проверить просто: берёт кратность от 10 от результата и складываем с контрольной суммой. Если сумма равна 10, то всё оки. Либо, если контрольная сумма 0 и наш результат кратен нулю, то тоже оки.

    EAN-13 отличается от UCC-12 (американского кода, используется также в канаде) только длиной, но проверяется одинакого.

    PHP:
    1. <?
    2. function barcode($value){
    3.     $number = strrev(str_replace(' ', '', $value));
    4.     $sum = 0;
    5.  
    6.     if (!is_numeric($number))
    7.         return;
    8.  
    9.     for ($i = 1, $c = strlen($number); $i < $c; $i += 2)
    10.         $sum += ($number[$i] * 3 + $number[$i + 1]);
    11.  
    12.     $mod = ($sum % 10);
    13.     return ($number[0] == ($mod ? (10 - $mod) : 0));
    14. }
    PHP:
    1. <?
    2.     barcode('5 90123 412345 7'), // EAN-13, из википедии
    3.     barcode('4 78123 456789 2'), // EAN-13, с сайта с описанием спецификации
    4.     barcode('0 71737 04061 4'), // UCC-12, с пачки сигарет
    5.     barcode('4 607002 22012 0') // EAN-13 с нулём, от какого-то коньяка,
    6.     barcode('9 87 65432 10921 3') // ITF-14, из википедии
    7. );
    Везде вернёт true.
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    прикольно. В zf это немного покрупнее (я про кол-во кода для проверки).

    А нет ли распознавальщика QR- и datamatrix-кодов на похапэ?
     
  3. У Luge в блоге что то вроде было )
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В Zend Framework всё покрупнее. В случае с EAN-проверяльщиками, крупный код из-за абстракции какой-нибудь: класс валидатор, класс EAN валидатор, класс EAN-13 для EAN валидатора. :)

    Читальщика QR у мну нет и в интернетах не нашёл. Можно поискать решения на Java и C#, на этих языках что-нить точно должно быть.
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не буду я распозновальщик делать!
     
  6. злой ты. а как же добро и мир во всем мире?
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    мир будет после ядерного взрыва
     
  8. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Почему? Ты же умный. Умный и красивый. Умный, красивый и добрый. Умный, красивый, добрый и отзывчивый.

    P.S. Ну как, помог мой врождённый талант к подлизыванию? :)
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Как же я в туалет теперь пойду? Зализал всё гад :D
     
  10. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ещё проверку IBAN сделай до кучи, хотя их толпы уже готовых…
     
  11. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    IBAN мне точно не понадобится. ISBN делал потому что делать было нечего, а EAN нужен был. Вот и решил сам разобраться в спецификации. Познания это интересно, а чего же интересного в скачивании готового? :)