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

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

Дом, где я спал... Или Шо? Опять?!

Обсуждали возможное возрож­дение вытрез­ви­телей. Я еще подумал, что за последний год раза два всего видел пьяных на улице. Не то, чтобы в стельку — на ходу, но в стиле «сына делает первые шаги». То есть, пьяных почти не стало, с чего про вытрез­вители-то вспомнили? И что же? Еще день не закон­чился, а я пока от метро до трамвая дошел, двух таких «взвол­но­ванных», смело наре­за­ющих волны повстречал. Сначала первый все с тротуара на дорогу норовил выпасть, затем второй, норовил на рельсах трамваю конку­ренцию составить. Получается, уже пора, да?

О маршрутках

What was I scared of... Самые страшные водители маршруток в это время года — любители красоваться в нижнем белье. Увидите водителя в маечке, ни в коем случае без крайней  на то необходимости не садитесь в автобус! И уж Боже вас упаси, сделать это в час пик. Не тешьте себя надеждой, водитель не «морж» и даже не претендует получить значек ГТО . Ему просто абсолютно все равно, что за его спиной куча людей по полчаса обливаются по́том, не имея возможности не то что снять с себя верхнюю осеннюю одежду, а часто даже извернуться и встать поудобнее.