Kirjoittaja: Metabolix
Kirjoitettu: 08.11.2015 – 24.03.2019
Tagit: yhteiskunta, kirjasto, koodi näytille, vinkki
Kansainvälistä viitenumeroa käytetään esimerkiksi SEPA-maksuissa. Viitenumeron alussa ovat merkit RF ja kaksinumeroinen tarkiste, ja tämän jälkeen voi tulla enintään 21 omavalintaista merkkiä. Suomessa käytetään loppuosana yleensä numeroista 0–9 muodostuvaa suomalaista viitenumeroa (ks. toinen koodivinkki), mutta myös kirjaimet A–Z ja a–z ovat sallittuja. Tarkiste muodostetaan seuraavasti:
Kansainvälistä viitenumeroa koskee standardi ISO 11649.
Alla ovat Python-funktiot kansainvälisen viitteen laskemiseen ja tarkastamiseen.
# -*- coding: utf-8 -*- # iso_11649.py # Moduuli kansainvälisten viitenumeroiden käsittelyyn (ISO 11649). # Siivoaa viitteestä ylimääräiset välimerkit. def clean(reference): return "".join(i for i in str(reference) if "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".find(i.upper()) >= 0) # Muuttaa viitteen numeeriseen muotoon jakojäännöstä varten. def numeric(reference): return "".join(str(j) for i in str(reference) for j in ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".find(i.upper()),) if j >= 0) # Luo kokonaisen viitteen (RF + tarkiste) loppuosan perusteella. def create(reference): reference = clean(reference) num = numeric(reference + "RF00") check = "%02d" % (98 - int(num) % 97) return "RF" + check + reference # Tarkastaa, onko viite kelvollinen. def validate(reference): reference = clean(reference) num = numeric(reference[4:] + reference[0:4]) return 4 < len(reference) <= 25 and int(num) % 97 == 1 # Muuttaa viitteen tulostettavaan muotoon. def printable(reference): reference = clean(reference) return " ".join(reference[i:i+4] for i in range(0, len(reference), 4))
Kun funktiot on tallennettu moduuliksi iso_11649.py, niitä voi käyttää esimerkiksi näin:
# -*- coding: utf-8 -*- import iso_11649 as ref # Suomalainen viitenumero kansainväliseksi: s = "12345672" r = ref.create(s) print("%s => %s => %s\n" % (s, r, ref.printable(r))) # 12345672 => RF8512345672 => RF85 1234 5672 # Kansainvälisen viitenumeron tarkastus: def f(x): if ref.validate(x): print("%s kelpaa" % x) else: print("%s ei kelpaa" % x) f(r) # kelpaa (juuri itse laskettu) f("RF45 G72U UR") # kelpaa f("RF00 1234 5678") # ei kelpaa