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

Проверка штрих-кода в базе данных 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 ° . Лайфхак Прислонить к рамке ска...

В контакте — временно

Осенило. Придумал парочку по-насто­ящему замеча­тельных, элегантных даже, названий сети (SSID) для роутера. Это в продол­жение темы о написании русских фраз латин­скими буквами , что полезно для называния сетевых устройств, где кириллица в принципе не приемлема — эдакий изящный способ донести до окружа­ющих некое скрытое послание. cold and snowy wifi hotspot, by woodleywonderworks Мои новые месседжи на роутере: B KOHTAKTE — закрытая локальная сеть, для своих. BPEMEHHO B COTE — временный халявный вайфай для алчущих связи. Теперь так, да. Красиво же, не? Кстати Пока ехал по городу и набирал текст, нашел замеча­тельное и ориги­нальное послание в названиях сетей: Give password for sex. Красота! А сам автома­тически адапти­ровал к описы­ваемой здесь системе: A CEKPET 3A CEKC . С одним допуще­нием, правда — исполь­зована цифра, вместо буквы.

В удаленку на Ґноме

Шпора по Линуху Затосковал в macos, пробую периодическими набегами вернуться на Linux. То в виртуальной машине его поставлю, то вторым бортом. О, сколько снова вопросов, поисков и... иногда даже решений. Это моя записная книжка чтобы решения эти не растерять. Подключение к рабочей сети по VPN Мне важно чтобы я мог работать удаленно. Не то чтобы это было моё основное занятие, просто иногда в выходной проще подключиться и сделать, чем долго объяснять в трубку на пальцах да по памяти что надо увидеть и где нажать чтобы возможно исправить нетиповую ситуацию. На работе у меня конечно же Виндоза, дома есть подопытный Линукс с сороковым Ґномом. Мне выданы ключи от туннеля ви-пи-эн (сертификат ca.crt , файл конфигурации work.ovpn и логин с паролем). Первым делом создаю скрытую папку .cert и сохраняю в нее полученные сертификат с файлом конфигурации туннеля. $ mkdir ~/.cert $ mv ca.crt ~/.cert $ mv work.ovpn ~/.cert Теперь создаю новое VPN-соединение импортируя OVPN ф...