К основному контенту

Проверка штрих-кода в базе данных Ninox

Открыл в полюбившейся программе Ninox Database мою учебно-развлекательную базу данных товаров, подумал: классно было бы вносимый штрихкод проверять прямо при вводе. А то на Айфоне-то фотосканер кода в цифрах не ошибется, а на компьютере я их вручную ввожу, приходится тщательно проверять потом, что навводил.

Достал клавиатуру, занес над ней руки, щелкнул костяшками... И такая вдруг лень накатила — у меня ж на товарах как минимум два типа кодов уже попадались — стандартный EAN-13 и короткий EAN-8. Третий, UPC американский, тоже не исключаю. И какой из них проверять?

Передумал. Почти. Пошел почитать хоть что это за коды такие. Оказалось, что как минимум шесть типов кодов (включая перечисленные выше) проверяются одним и тем же способом! То есть, по сути, любой из них можно дополнить слева нулями до самого длинного типа и проверять уже только его.

Оправданий не осталось. Пришлось снова достать клавиатуру.

Код проверки кода

В моем примере скрипт запускается всякий раз после изменения в Ninox Database поля кода товара itemBarcode и выносит вердикт в текстовое поле статуса штрихкода barcodeValidation, специально добавленное в базу для этого случая.

Для удобства ввода код товара можно печатать с пробелами, они вырежутся, если совпадет контрольная сумма.

let barcodeShrinked := replace(itemBarcode, " ", "");
let barcodeLength := length(barcodeShrinked);
let evenPositionDigitSum := 0;
let oddPositionDigitSum := 0;

if barcodeLength  =  8 or
    barcodeLength = 12 or
    barcodeLength = 13 or
    barcodeLength = 14 or
    barcodeLength = 17 or
    barcodeLength = 18 then

    (let barcode := lpad(barcodeShrinked, 19, "0");

    for i in range(0, 9) do 
        evenPositionDigitSum := evenPositionDigitSum + number(substr(barcode, i * 2, 1));
        oddPositionDigitSum := oddPositionDigitSum + number(substr(barcode, i * 2 + 1, 1))
    end;

    let barcodeCheckSum := number(substr(barcode, 18, 1));
    let resultSum := 3 * oddPositionDigitSum + evenPositionDigitSum;
    let resultCheckSum := 0;

    if resultSum != 10 * floor(resultSum / 10) then
        (resultCheckSum := 10 * floor(resultSum / 10) - resultSum + 10)
    else void;

    if barcodeCheckSum != resultCheckSum then
        (barcodeValidation := "Wrong checksum")
    else
        (itemBarcode := barcodeShrinked;
        barcodeValidation := "Correct"))

else
    (barcodeValidation := "Wrong barcode")

Все, штрих-код товара проверяется, можно переключиться на что-нибудь еще!

Комментарии

Популярные сообщения из этого блога

Сканируем паспорт

Как сказал бы сборник российских пословиц и поговорок: Сорок пять — беги паспорт получать! Дожил. Получил. Новый, современный, с цветной фотографией под голографической ламинацией. Все сверкает и переливается — красота! И тут наступает время Первого Скана. Кладу новенький паспорт в сканер, давлю сканировать, беру лист… что за черт! — на моей фотографии в паспорте, прямо на лбу капслоком написано РОССИЯ. Хоть сегодня и праздник такой, но — нет. Наверно, положил неправильно. Поворачиваю паспорт в сканере, повторяю — теперь рот заклеен стикером »РФ«. Еще поворот — диадема двуглавая. Настоящий — как ни крути Паспорт должен быть защищен, понятное дело. Но мне стало интересно, а можно ли вообще найти угол сканирования, при котором проявление голографических знаков над фотографией минимально? После серии сканирований (надо ж куда-то лишний выходной потратить) нашел, что голограмма видна всегда, но паспорт лучше всего класть под углом 140 ° —145 ° . Лайфхак Прислонить к рамке ска

Муаровый микроскоп

Забавный муар получается когда смотришь через две параллельные сетки. Видна та же исходная сетка, только на несколько порядков увеличенная. А что, если между сетками поместить что-либо ажурное, увеличится? Сквозь автобусный рекламный баннер Интересно. Существуют увеличительные приборы, использующие этот оптический эффект? Какой-нибудь муаровый микроскоп?

Иконка принтера своими руками

Кто-то терпит, а я не могу... Когда могу. Удивительно, но до сих пор существуют произ­во­дители, которые давно делают потря­сающие товары, но так и не научились сопро­во­ждать их сопут­ству­ющей графикой. Я для нечастой домашней печати выбрал замеча­тельный принтер Xerox Phaser 3250. Красивый, быстрый, экономный. Да, в Ксероксе сделали родной драйвер принтера для Макинтоша, и даже перио­ди­чески его обновляли. Но, мало того, что они ни разу не снабдили драйвер мало-мальской иконкой, так полно­ценных, хорошего качества, изобра­жений самого принтера в сети нужно еще поискать. Чего боятся? Что кто-то скитаит их дизайн, что ли? — тьфу делов-то! Скорее всего, просто лень напря­гаться, потому что рассчи­тывали на корпо­ра­тивный рынок, а не на потре­би­тельский. Сегодня так вести себя просто непрос­ти­тельно. Что ж, оставим это на совести произ­во­ди­телей, сделаем все сами. Красивый принтер в Доке печатает документ Для себя я эту проблему решил своими руками и уже несколько лет, в