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 | 11397 (8838) | Vanquish |
» | Lidl Pilos grški tip jogurta 2%Oddelek: Loža | 5343 (4286) | Vuli |
» | Kontakt obrazecOddelek: Izdelava spletišč | 2150 (1995) | betmen |
» | Kaj je to UPC/EAN CodeOddelek: Pomoč in nasveti | 3549 (3202) | No Can Do |
» | Navijanje E6600 NUJNOOddelek: Navijanje | 2948 (1705) | M-XXXX |