Forum » Programiranje » Kako (pravilno) preveti, ali je GTIN vrednost valid?
Kako (pravilno) preveti, ali je GTIN vrednost valid?
HotBurek ::
Dobro jutro.
Evo, nov dan, nov izziv.
Tokrat me zanima, kako preverit, ali je zapis GTIN-a (8, 12, 13 in 14) veljaven?
GTIN13: 7035620047176
Spletna stran [ https://eancheck.com/ ], [ https://www.gs1.org/services/verified-b... ] in [ https://worldbarcodes.com ] pravijo, da je GTIN valid.
Spodnja koda pravi, da ni.
Zanima me, če lahko kdo poda trden dokaz, da je zgornji GTIN13 valid oz. da ni. Ter, kako pridit do te informacije... po možnosti z testom v Python kodi.
Koda:
Evo, nov dan, nov izziv.
Tokrat me zanima, kako preverit, ali je zapis GTIN-a (8, 12, 13 in 14) veljaven?
GTIN13: 7035620047176
Spletna stran [ https://eancheck.com/ ], [ https://www.gs1.org/services/verified-b... ] in [ https://worldbarcodes.com ] pravijo, da je GTIN valid.
Spodnja koda pravi, da ni.
Zanima me, če lahko kdo poda trden dokaz, da je zgornji GTIN13 valid oz. da ni. Ter, kako pridit do te informacije... po možnosti z testom v Python kodi.
Koda:
def luhn_check(gtin):
# init is it valid
is_it_valid = "false";
# check if length is in 8, 12, 13, 14
if len(gtin) in [8, 12, 13, 14]:
# try
try:
# check if int
gtin_test = int(gtin);
# init total
total = 0;
# set reverse digits
reverse_digits = str(gtin)[::-1];
# luhn algorithm
for i, digit in enumerate(reverse_digits):
n = int(digit)
if i % 2 == 1:
n *= 2
if n > 9:
n -= 9
total = total + n;
# check if total devided by 10 is 0
if total % 10 == 0:
# set is it valid
is_it_valid = "true";
except:
pass;
# return is it valid
return is_it_valid; root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
- spremenilo: HotBurek ()
HotBurek ::
Evo, s pomočjo spletnega pomočnika sem zadevo rešil.
Dejansko sploh ne vem, zakaj sem šel sem gor to spraševat... (bi bilo verjetno bolj primerno "ejga, a si se že učlanu v strelsko društvo").
Enivej.
Zadevo sem šel dodatno preverjat, ker sem v bazi imel okrog miljon pa pol GTIN-ov, od tega je neki kr en brezvezen tekst, ostalo so pa zapisi s številkami.
In je bilo po zgornjem algoritmu zgolj 10% valid, ostalih 90% pa kao ne. In se mi je to razmerje zdelo a bit too much.
Koda funkcije z algoritmom (plus moj stil):
Dejansko sploh ne vem, zakaj sem šel sem gor to spraševat... (bi bilo verjetno bolj primerno "ejga, a si se že učlanu v strelsko društvo").
Enivej.
Zadevo sem šel dodatno preverjat, ker sem v bazi imel okrog miljon pa pol GTIN-ov, od tega je neki kr en brezvezen tekst, ostalo so pa zapisi s številkami.
In je bilo po zgornjem algoritmu zgolj 10% valid, ostalih 90% pa kao ne. In se mi je to razmerje zdelo a bit too much.
Koda funkcije z algoritmom (plus moj stil):
def luhn_check(gtin):
is_it_valid = "false";
if len(gtin) in [8, 12, 13, 14]:
try:
# make digits
digits = [int(d) for d in str(gtin)];
# read last control/check digit
check_digit = digits[-1];
# exclude check digit
digits = digits[:-1];
# reverse the digits to apply weights from the right, as per GTIN rules
digits = digits[::-1]
# init total
total = 0;
# go after each digit
for i, digit in enumerate(digits):
# init weight
weight = 0;
# weights: 3,1,3,1,... from the right
if (i % 2) == 0:
# set weight
weight = 3;
else:
# set weight
weight = 1;
# add to total
total = total + (digit * weight);
# calc check digit
calc_check_digit = (10 - (total % 10)) % 10;
# check if the same
if check_digit == calc_check_digit:
# set valid
is_it_valid = "true";
except :
print("not int");
pass;
else:
print("wrong len(" + str(len(gtin)) + ")");
return is_it_valid; root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | Nakazilo na napačen TRR (strani: 1 2 )Oddelek: Loža | 12383 (9824) | Vanquish |
| » | Lidl Pilos grški tip jogurta 2%Oddelek: Loža | 6239 (5182) | Vuli |
| » | Kontakt obrazecOddelek: Izdelava spletišč | 2243 (2088) | betmen |
| » | Kaj je to UPC/EAN CodeOddelek: Pomoč in nasveti | 3649 (3302) | No Can Do |
| » | Navijanje E6600 NUJNOOddelek: Navijanje | 3025 (1782) | M-XXXX |