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

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

Mac и Unix | Клавиатура, какую хотел

С тех пор как у меня появилась клавиатура мечтал научиться печатать слепым методом. Мечтал, печатая на печатной машинке, мечтал, обзаведшись компьютером. В конце концов, в какой-то момент взял за правило не смотреть на клавиатуру, когда набираю текст. Сначала медленно, потом быстрее… стало получаться. Научившись же, стал спотыкаться о то, что приходится жать клавишу шифт каждый раз, когда нужно поставить запятую. Вспомнил, что на печатных машинках знаки пунктуации важнее цифр, и там нужно жать шифт как раз в обратном случае — для набора чисел. Так как на компьютерной клавиатуре есть отдельный блок клавиш (с цифрами), которыми гораздо удобнее набирать числа, было бы логично поменять местами цифры со знаками пунктуации. Нашел, что для Макинтоша есть специальная программа редактирующая раскладки клавиатуры — Ukelele . Оказалось, что редактировать клавиатуру совсем не сложно. В результате и получилась клавиатура, какую хотел . Что сделано: Поменяны местами цифры со знаками...

В помощь по химии | Таблица Менделеева для офисного принтера

Все лучшее — детям Потребовалась дочери для домашних занятий своя настольная шпаргалка с таблицей Менделеева. Потребовалась, как всегда, в стиле «Все пропало!», то есть — вынь, да положь. А дома только черно-белый принтер. Побегал по интернетам, посмотрел готовые картинки. Везде в основном цветные изображения далеко не лучшего качества, которые на моем принтере просто обязаны слиться в грязно-серое, нечитаемое месиво. Доченьку я люблю, глазки и нервы ее мне жалко. Поэтому, я посидел вечерок, нарисовал ей табличку в Намберзе. Как-то так По моему, замечательно получилось. Сохранил pdf на Гугл-диске . Берите, не пожалеете. Кстати Заметите ошибки, сообщите, пожалуйста.