Tarkistusmerkkien laskentamenetelmiä

Eli melkein kaikki mitä olet aina halunnut tietää tarkistusmerkeistä,
mutta et ole koskaan tullut kysyneeksi

Copyright © Teppo Vuori 28.06.2014

Sisältö



Johdanto

Yleistä

Ihminen tekee helposti virheitä syöttäessään numerosarjoja tietokoneelle. Tarkistusmerkin avulla useimmat syöttövirheet voidaan havaita välittömästi. Erityisen hyödyllistä tämä on silloin, kun numerosarjaa ei voida tarkistaa millään muulla keinolla. Pankkisiirron viitenumero on hyvä esimerkki tällaisesta tapauksesta.

Tarkiste on merkki, joka liitetään numero- ja/tai kirjainjonoon ja joka lasketaan jollakin matemaattisella kaavalla jonon muista merkeistä. Tietoja syötettäessä tietokone vertaa syötettyä ja laskettua merkkiä toisiinsa, ja jos ne eivät ole samat, on tapahtunut virhe. Kansainvälinen standardointijärjestö ISO on standardoinut useita tarkistusmenetelmiä (standardi ISO 7064).

Yhdessä ainoassa laajasti käytetyssä sovelluksessa tarkisteet voivat vähentyneiden virheiden ansiosta estää monia hankalia tilanteita ja säästää selvittelykustannuksissa jopa miljoonia euroja vuodessa. Äärimmäisissä tapauksissa, kuten verensiirroissa, voi säästyä ihmishenkiä. Lähes aina tarkisteella varustettu merkkijono on tunniste: Henkilön, esineen, aineen tai asian.

Sovellusala

Erilaisista tunnuksista, numeroista ja koodeista voitaisiin kirjoittaa paljon laajemmatkin kuvaukset, mutta tämän dokumentin aiheena on pääsääntöisesti vain tarkistusmerkin laskenta, ja toissijaisesti tarkistettavien tietojen rakenteen kuvaus. Dokumentin aihepiiriin eivät kuulu konekielisissä tiedoissa käytettävät tarkistus- ja korjausmenetelmät, joiden yhteydessä esiintyy usein termi tarkistussumma (checksum). Ulkopuolelle on rajattu myös salaukseen perustuvat tarkistusmenetelmät. Viivakoodeihin liittyvät menetelmät kuuluvat aihepiiriin yleensä vain jos myös selväkielinen tieto on tapana merkitä näkyviin. Sekä tarkistussummista, salauksesta että viivakoodeista on Internetissä niin paljon muiden kirjoittamaa materiaalia, ettei minulla ole näihin aiheisiin mitään lisättävää, joten keskityn asioihin, joita ihmiset voivat helposti havaita ilman mitään laitteita. Dokumentissa ei ole ohjelmointiesimerkkejä, mutta kirjoittamassani erillisessä Tuatara-ohjelmapaketissa on JavaScript-ohjelmia joidenkin tavallisimpien tarkistusten laskemista varten. Tässä dokumentissa on linkkejä vastaavissa kohdissa.

Kehystetty ja tavallista pienempi teksti sisältää syventäviä taustatietoja, jotka voivat antaa aiheesta laajemman näkemyksen, mutta eivät ole oleellisia tarkisteiden laskennan tai tarkistettavien tietojen rakenteen ymmärtämisen kannalta.

Kuten seuraavasta kappaleesta käy ilmi, tällä dokumentilla ei voi olla kohderyhmää, mutta jos voisi, ensisijaisesti siihen kuuluisivat ohjelmoijat, koska lähes jokainen meistä koodaa joskus jonkin tämäntyyppisen tarkistuksen. Muutaman sovelluksen kohdalla tiedot ovat valitettavasti puutteelliset, mikä on ao. tapauksissa mainittu, mutta yleensä kuvaukset on pyritty tekemään sellaisella tarkkuudella, että ohjelman kirjoittaminen niiden perusteella on mahdollista. Ilmeisesti tässä on myös onnistuttu, koska kyselyjä asiasta tulee hyvin harvoin. Kohderyhmän puuttuessa kaikki lukijat ovat yhtä tervetulleita.

Varoitukset

Vaikka kaikki mieleen tulleet keinot on käytetty, jotta jokainen yksityiskohta saataisiin mahdollisimman huolellisesti varmistetuksi, esitettyjen tietojen luotettavuudesta ei anneta mitään takuuta! Minulla ei ole mitään mahdollisuutta kontrolloida yhtäkään tässä dokumentissa kuvatuista sovelluksista, joten siinäkin tapauksessa että kirjoittamani teksti pitää paikkansa kirjoitushetkellä, mihin tahansa menetelmään tai sovellukseen voi milloin tahansa tulla muutoksia ilman, että asiasta vastaavat henkilöt ilmoittavat siitä minulle (ilmoitus olisi tietysti hyvin toivottava). Tiedot on koottu pelkästään henkilökohtaisen mielenkiinnon vuoksi, ei käyttöä varten. Mahdollinen käyttö tapahtuu kokonaan käyttäjän omalla vastuulla! Todella pätevän selvityksen kirjoittamiseen tästä aiheesta tarvittaisiin matemaatikko, jollainen minä en ole. Tosin tämä voi olla hyväkin asia – luulen useampien ihmisten ymmärtävän kirjoittamaani tekstiä kuin matemaattisia merkintöjä. Lukijan kannattaa olla tarkkana sen suhteen, mitkä asiat on esitetty faktoina, mitkä taas epävarmoina tietoina tai spekulaatioina.

Jos syötät tarkisteellisia tietoja tietojärjestelmään, ja saat virheilmoituksen, selvitä ao. lähteestä tiedon oikea sisältö. Älä yritä muokata tarkistetta muodollisesti oikeaksi! Toisaalta, siitä että esim. henkilötunnus, Y-tunnus tai pankkitilin numero on muodollisesti virheetön ei automaattisesti seuraa, että vastaava henkilö, yritys tai pankkitili on todella olemassa, tai että tunniste kuuluu sille, jolle sen väitetään kuuluvan.

Lähteet ja tietojen levitys

Esitetyt tiedot perustuvat osittain omiin havaintoihini, mutta suurin osa on koottu monista eri lähteistä, jotka on mahdollisuuksien mukaan mainittu ao. kohdissa. Kiitän kaikkia niitä henkilöitä ja yhteisöjä, joilta peräisin olevia tietoja olen käyttänyt. Erityisen kiitoksen saavat ystäväni Tapani Tarvainen arvokkaiden matemaattisten taustatietojen antamisesta ja veljeni Hannu Vuori Coden-tunnuksen tarkistusmenetelmän selvittämisestä. Sukulaiset ja työtoverit ansaitsevat kiitokset kärsivällisyydestä, luottamuksesta ja avusta monien yksityiskohtien tarkistamisessa.

Parhaan tietoni mukaan kaikki tässä esitetyt tiedot ovat julkisia, ja se että minä levitän niitä ei loukkaa kenenkään tekijän- tai muita oikeuksia eikä riko mitään salassapitomääräyksiä. Omasta puolestani annan luvan levittää tätä dokumenttia kokonaisuudessaan vapaasti muualla kuin Internetissä tai muissa tietoverkoissa, edellyttäen ettei levityksestä peritä maksua eikä tähän dokumenttiin tehdä muutoksia. Muutosoikeuden pidätän itselläni. Tätä dokumenttia on käsiteltävä yhtenä kokonaisuutena; mitään sen osaa ei saa irrottaa asiayhteydestään. Internetissä linkitys on ainoa sallittu levitystapa, koska dokumenttiin tulee jatkuvasti muutoksia ja koska ylimääräiset kopiot vääristävät kävijätilastoja. Dokumentin käytöstä opetustarkoituksiin muuten kuin linkittämällä on ilmoitettava minulle.

Tämän sivun oikea kotipaikka on http://tarkistusmerkit.teppovuori.fi/tarkmerk.htm.

Luulin kirjoittaneeni ylläolevan kappaleen niin, ettei se jätä mitään epäselväksi, mutta toistuvien väärien tulkintojen vuoksi yritän vielä vääntää oleellisimman ns. rautalangasta:

Tästä dokumentista EI saa tehdä kopioita, jotka näkyvät Internetissä muussa kuin ylläolevassa osoitteessa!

Of this document it is FORBIDDEN to make copies, which can be seen in the Internet in any other than the original address!

Epäselvissä tapauksissa kannattaa ensin kysyä minulta. Palautesivu löytyy täältä.

Palaute ja jatkokehitys

Kuvattuja menetelmiä sopii kokeilla vastaantuleviin numerosarjoihin – muihinkin kuin tässä mainittuihin. Mahdollisista virheistä, vanhentuneista tiedoista tai muista merkittävistä havainnoista pyydän ilmoittamaan sähköpostitse. Merkittäviä havaintoja ovat esim. vahvistus jonkin epävarmaksi mainitun asian paikkansapitävyyteen, täydennys johonkin annettuun tietoon (kts. Avoimia kysymyksiä) tai tieto jostakin tässä mainitsemattomasta numerosarjasta, johon jokin kuvatuista menetelmistä sopii. Tai jos haluat vain kertoa lukeneesi tämän, niin sekin on kiva tietää. Otan myös hyvin mielelläni vastaan ehdotuksia tähän dokumenttiin tehtävistä lisäyksistä. Helpoimmin mukaan pääsevät järjestelmät, joihin tavallinen ihminen voi suhteellisen usein törmätä normaalissa elämässä (Suomessa) tai jotka ovat jollakin tavalla erityisen mielenkiintoisia (puhtaasti subjektiivisen mielipiteeni perusteella, mutta se kattaa aika paljon). Lähde jossa menetelmä kuvataan on tietysti myös eduksi. Tärkeimpien avustajien nimet julkistetaan jos he antavat siihen luvan. Yritän parhaan kykyni mukaan selventää mahdollisia epäselviä kohtia jos joku sellaisista huomauttaa. Dokumentti näyttää olevan pysyvästi keskeneräinen ja päivityksiä tehdään sen mukaan miten tietoja löytyy. Osittain keskeneräisyys johtuu myös siitä, että maailma ympärillä muuttuu koko ajan.

Edelläkuvattua palautetta on kaikkien lukijoiden hyödyksi tullutkin, mistä esitän kiitokset niillekin palautteen lähettäjille, joita ei nimeltä mainita.

Erityismaininnan ansaitsee Kari Hänninen (Finn-ID Oy), joka lähetti minulle mm. lukukynän viivakoodien lukemista varten osoitukseksi siitä, kuinka hyödyllisenä hän tätä dokumenttia pitää.

Tällä sivulla kävijöistä kerätään tilastotietoja, joista eräät ovat osoittautuneet hyödyllisiksi sivua kehitettäessä.

Termejä

Tekstissä esiintyy toistuvasti sana "jakojäännös". Jos sen merkitys on lukijalle hiukankin epäselvä, asia kannattaa tarkistaa ao. liitteestä, jossa on myös selitetty kongruenssi ja sen symboli (≡). Jos luulet osamäärän desimaaliosaa jakojäännökseksi, sinulla on ehdottomasti aihetta lukea em. liite.

Monessa tapauksessa tarkistusmenetelmällä ei ole erityistä nimeä. Niinpä tässä dokumentissa on paikoin käytetty otsikkona sovellusaluetta, jolla menetelmää käytetään. Silloinkin kun nimi on olemassa, se ei välttämättä ole kovin yksilöivä; tyypillisesti nimeä "Moduli n" (tai joskus "Modulo n", englanniksi myös "Modulus n") käytetään kaikista menetelmistä, joissa tehdään jakolasku luvulla n, vaikka kaikki muut yksityiskohdat olisivat erilaisia. Muutenkin samaa nimeä – esim. IBM Check – voidaan käyttää keskenään aivan erilaisista menetelmistä. Joskus nimeen liitetään täsmentäviä määreitä. Useimmat tässä dokumentissa käytetyt nimet eivät ole kovin "virallisia", mutta otsikointia varten jotakin on pitänyt keksiä. Nimiä yritetään sentään käyttää johdonmukaisesti, mutta joskus pitkäänkin käytössä ollutta nimeä voidaan joutua muuttamaan jonkin uuden menetelmän kuvausta lisättäessä. Koska jakaja näyttää olevan useimpien tarkistusmenetelmien tärkein yksittäinen ominaisuus ja monessa tapauksessa nimeämisen peruste, menetelmät kuvataan jakajan suuruuden mukaan laskevassa järjestyksessä, joka näyttää myös olevan likimain sama kuin paremmuusjärjestys, parhaasta alkaen.

Lukuohje: Jos menetelmän nimessä esiintyy sana "moduli" (tai "mod"), sitä seuraava luku luetaan tavaomaiseen tapaan, eli esim. "Moduli 34" = "moduli kolmekymmentä neljä", koska 34 on jakaja jota menetelmässä käytetään sellaisenaan. Jos taas menetelmän nimessä eiintyy sana "kerroin", sitä seuraavat numerot luetaan yksitellen, esim. "Kerroin 137" = "kerroin yksi kolme seitseman", koska 137 ei tässä ole luku, vaan luettelo menetelmässä käytettävistä painokertoimista, joista kutakin käytetään erikseen. Selvempää olisi kirjoittaa esim. 1-3-7, mutta tämä johtaisi joissakin tapauksissa ei-toivottuihin rivinvaihtoihin.

Lähinnä toiston vähentämiseksi olen käyttänyt sanoja "tarkistenumero" ja "tarkistusnumero" silloin kun kyseessä todella on numero, ja sanoja "tarkistemerkki" ja "tarkistusmerkki" kun myös kirjaimet ovat mahdollisia. Sanaa "tarkiste" käytän synonyymina kaikille edellämainituille. Muuta merkityseroa en ole näille nimityksille antanut. Joissakin muissa dokumenteissa käytetään myös nimeä "tarkastusmerkki", mutta tämä sana viittaa paremminkin merkintään tehdystä tarkastuksesta (esim. jalometallin pitoisuuden osoittava tarkastusmerkki). ATK-sanakirjan mukaan kyseessä on "varmistusmerkki" tai "varmistusnumero", mutta muualla näitä nimityksiä käytetään tavallisesti tarkoittamaan salasanaa tai sellaiseen verrattavaa merkkijonoa.

Minulle on huomautettu, että suomen kielen sääntöjen mukaan tällaisessa yhteydessä pitäisi puhua tarkastamisesta eikä tarkistamisesta, ja ihan tottahan tämä on.

Tarkastaa = Käydä läpi ja todeta.
Tarkistaa = Todeta ja korjata.
(Lähde: Tiede-lehti 3/2009 s. 17 palsta Omat sanat)
Tässä dokumentissa kuvattujen tarkisteiden avulla virheitä voidaan todeta mutta ei korjata. Useita viikkoja kestäneen kokeilun jälkeen on kuitenkin tilastotietojen perusteella todettava, että vain harva etsii tällaisia tietoja jotakin tarkastamisesta johdettua sanaa käyttäen, vaikka tämä dokumentti on nykyisin sellaisillakin sanoilla löydettävissä. Niinpä en aio tämän johdosta tehdä mitään muutoksia. Siitä riippumatta mitä merkityksiä kielitieteilijät ja sanakirjojen laatijat sanoille antavat, minä yritän kirjoittaa dokumentiia, jonka ihmiset löytävät hakukoneiden avulla itselleen tuttuja sanoja käyttäen. Tähän liittyen en myöskään käytä termiä "tarkastusluku", joka mielestäni muutenkin sopisi käytettäväksi vain jos tarkisteessa on enemmän kuin yksi merkki.

Siitäkin on huomautettu, että käytän sanaa moduli, vaikka jakojäännöksen toinen nimi on modulo. Todellisuudessa käytän kyllä sanaa modulo kun on kysymys nimenomaan jakojäännöksestä tai sen laskemisesta, kun taas moduli esiintyy menetelmien nimissä, jotka muutenkin ovat usein vain mielivaltaisia valintoja. Tästä olen keskustellut yhden matemaatikon kanssa, eikä modulissa ole hänen mielestään mitään vikaa tällä tavalla käytettynä. Voi olla jopa hyvä asia, että menetelmien nimissä käytetään eri sanaa, koska useimmiten menetelmä sisältää muutakin kuin jakojäännöksen laskemisen; eri sanan käyttö voi tehdä selvemmäksi sen, että viitataan tarkistusmenetelmään eikä vain jakojäännöksen laskentaan. Itse en ole tuota modulia keksinyt, vaan se on peräisin jostakin dokumentista, jota en pysty enää jäljittämään (Luhnin moduli 10). Alun perin kyseessä voi hyvinkin olla käännösvirhe, mutta nyt se on päässyt sen verran vakiintumaan, että olen aika haluton sitä muuttamaan.

Monissa dokumenteissa tunnisteita nimitetään numeroiksi, vaikka ne sisältäisivät kirjaimia (arkkiesimerkkinä auton rekisterinumero), ja erityisesti tarkisteen laskennan yhteydessä yksittäisiä kirjaimia itseään sanotaan numeroiksi. Esityksen lyhentämiseksi otan itselleni vapauden noudattaa joskus samaa käytäntöä.

Tarkiste on englanniksi "check digit" tai "check character". On olemassa yleisesti käytetty termi "control number" (tai joskus "control digit"), mutta tämän dokumentin mukaista tarkistenumeroa sillä tarkoitetaan yleensä vain, jos kirjoittajan äidinkieli ei ole englanti; tavallisemmin ilmaus tarkoittaa jotakin tunnistetta tai sellaisen osaa. Sekaannukseen voi vaikuttaa se, että tarkistenumero on ranskaksi "chiffre de contrōle". "Check mark" suomennetaan joskus tarkistusmerkiksi, mutta sillä ei tarkoiteta samaa asiaa kuin tässä dokumentissa. Saksaksi tarkistusnumero on "Prüfziffer".

Uusimmat muutokset

  • 20.01.2012 Pankkiviivakoodien kuvaus poistettu vanhentuneena. Pankkiviivakoodit ovat edelleen käytössä, mutta nykyisissä versioissa 4 ja 5 ei ole ominaisuuksia, joiden kuvaaminen tässä dokumentissa olisi tarpeellista.
  • 02.02.2012 EORI-numeron kuvaus lisätty.
  • 06.03.2012 Poistettu kuvaus Y-tunnuksen erikoistapauksista. Tiedot olivat yli kymmenen vuotta vanhoja, enkä pysty tarkistamaan niiden nykyistä paikkansapitävyyttä.
  • 17.05.2012 Lounassetelien numerosarjoja koskeva kuvaus lisätty.
  • 02.10.2012 Poistettu kuvaus Microsoftin vanhoista tuotetunnuksista.
  • 16.08.2013 Kirjoitettu uudelleen eurosetelien sarjanumeroiden kuvaus ottaen huomioon uusi 2013 alkaen liikkelle laskettu setelisarja.
  • 21.02.2014 Pohjoismaisen tuotenumeron (Vnr) kuvaus poistettu vanhentuneena.
  • 28.06.2014 Poistettu maininnat ajokortin hallinnollisesta numerosta, koska sen tarkisteen laskenta on muuttunut. Nämä tiedot voidaan palauttaa, jos asiasta saadaan riittävän tarkkoja tietoja.
Tähän listaan ei merkitä pieniä muutoksia.


Moduli 97-10

Menetelmää käytetään kansainvälisen tilinumeron ja siihen liittyvien RF-viitteen ja IPI:n maksunaihekoodin tarkistamiseen.

Kansainvälinen tilinumero (IBAN)

IBAN:in tarkistusohjelma

Kansainvälinen pankkitilin numero (International Bank Account Number, IBAN) otettiin Suomessa käyttöön 01.10.2001 kansainvälisen maksuliikenteen helpottamiseksi. Vuoden 2007 alusta IBAN:in käyttö kansainvälisissä euromääräisissä maksuissa EU:n sisällä on ollut pakollista. Vuoden 2008 aikana IBAN otettiin käyttöön myös Suomen sisäisessä maksuliikenteessä, ja 01.07.2010 alkaen se on ollut pakollinen paperilaskuissa ja tilisiirtolomakkeissa; sähköisissä laskuissa se on pakollinen 01.01.2011 alkaen, ja yritysten ym. pankeille toimittamissa maksuaineistoissa (esim. palkat) 01.11.2011 alkaen. Periaatteessa se on pakollinen yksityisillekin, mutta pankit voivat tehdä muunnoksen automaattisesti. Finanssialan keskusliitto ilmoitti 02.06.2014 että muunnospalvelu lakkaa lähikuukausina.

Numero muodostuu kolmesta osasta:

  1. ISO 3166-1 -standardin mukainen kaksikirjaiminen maatunnus, suomalaisissa tileissä FI ("äf ii", ei "äf yksi", kuten jotkut ovat kirjoittaneet).
  2. Kaksinumeroinen tarkiste, joka lasketaan kaikissa maissa samalla tavalla.
  3. Loppuosa muodostetaan varsinaisesta tilinumerosta, johon joissakin maissa lisätään pankin tunnus. Säännöt vaihtelevat maittain, kuten tilinumeroiden rakennekin. Samasta syystä tämän osan (Basic Bank Account Number, BBAN) pituus vaihtelee, ja voi enimmillään olla 30 merkkiä, mutta on yksittäisessä maassa aina sama. Joissakin maissa käytetään myös kirjaimia, mutta Suomessa ei. Mahdolliset välimerkit jätetään pois. Suomessa tämä osa on aikaisempi kotimainen tilinumero 14-numeroisessa konekielisessä muodossa.
IBAN:issa ei käytetä pieniä kirjaimia. Konekielinen IBAN on yhtenäinen merkkijono, mutta paperilla se voidaan luettavuuden parantamiseksi jakaa neljän merkin ryhmiksi vasemmalta alkaen. Tarkisteen laskenta on monivaiheinen (esimerkkinä suomalainen tilinumero, mutta 1. vaihetta lukuun ottamatta prosessi on sama maasta riippumatta):
  1. Alkuperäinen (suomalainen) tilinumero (esim. 159030-776) muokataan 14-numeroiseen konekieliseen muotoon (15903000000776) ellei se jo tässä muodossa ole. Katso pankkitilin numero. Huomaa että suomalaiset 4- ja 5-alkuiset tilinumerot käsitellään eri tavalla kuin muut. Tässä kohdassa tilinumero siis on BBAN-muodossa.
  2. Numerosarjan loppuun liitetään maatunnus (tässä tapauksessa FI) ja kaksi nollaa (15903000000776FI00).
  3. Korvataan kukin kirjain numeroparilla Taulukon 1 mukaisesti (15903000000776151800). Sama korvaus tehdään myös BBAN-tilinumeroon sisältyville kirjaimille niissä tapauksissa joissa kirjaimia käytetään.
  4. Lasketaan näin saadusta luvusta modulo 97. Tarvittaessa katso Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.
  5. Jakojäännös (61) vähennetään 98:sta. Tulos (37) on tarkiste.
  6. Jos tulos on pienempi kuin 10, lisätään etunolla. Tarkisteen mahdolliset arvot ovat siis 02..98.
  7. Liitetään maatunnus ja kaksinumeroinen tarkiste BBAN-muodossa olevan tilinumeron eteen (FI3715903000000776). Tulos voidaan esittää myös ryhmiteltynä (FI37 1590 3000 0007 76).
Oman IBAN:in saa pankista ja muiden IBAN:it ao. tahoilta, eikä niitä pitäisi tehdä itse. Pankit tulostavat IBAN:in jokaiseen tiliotteeseen. Ei tarvitse mennä kauemmas kuin Viroon, kun IBAN:in muodostamiseen tarvitaan muutakin tietoa kuin maatunnus, tarkiste ja virolainen tilinumero. Tarkisteen muodostamista todennäköisempi tarve on annetun tilinumeron tarkistaminen, mikä onkin paljon helpompaa (jatketaan eo. suomalaista esimerkkiä, mutta tarkistus tehdään samalla tavalla myös ulkomaisille IBAN:eille):
  1. Siirretään maatunnus ja tarkiste tilinumeron loppuun (15903000000776FI37).
  2. Korvataan kirjaimet numeropareilla (15903000000776151837).
  3. Jaetaan saatu luku 97:llä.
  4. Jos IBAN on virheetön, jakojäännös on 1 (näin tapahtuu esimerkissä).
CRC-menetelmillä (Cyclic Redundancy Check) on samantapainen ominaisuus:
<Tarkisteellinen tieto> mod <Menetelmäkohtainen jakaja> = 0
eli tarkiste määräytyy niin, että jakojäännös on tarkistettavasta tiedosta riippumatta vakio.

IBAN:in on määritellyt Eurooppalaisten pankkien standardointijärjestö (European Committee for Banking Standards, ECBS) dokumentissa EBS204 (European Banking Standard) ja se on myös ISO:n standardi 13616. Nykyisin IBAN:ia ylläpitää ISO:n valtuuttamana SWIFT (Society for Worldwide Interbank Financial Telecommunications). IBAN on kehitetty käytettäväksi Euroopan Unionissa, ja Euroopan ulkopuolella sitä käyttää vasta parikymmentä maata; näihin eivät kuulu (helmikuussa 2014) seuraavat OECD-maat: Australia (AU), Chile (CL), Etelä-Korea (KR), Japani (JP), Kanada (CA), Meksiko (MX), Uusi-Seelanti (NZ) ja Yhdysvallat (US), eivät myöskään mm. seuraavat taloudellisesti tärkeät OECD:n ulkopuoliset maat: Argentiina (AR), Egypti (EG), Etelä-Afrikka (ZA), Hongkong (HK), Indonesia (ID), Intia (IN), Iran (IR), Kiina (CN), Kolumbia (CO), Malesia (MY), Singapore (SG), Taiwan (TW), Thaimaa (TH) ja Venäjä (RU). Tässä listassa aikaisemmin mainitut Brasilia (BR) ja Pakistan (PK) ovat ottaneet IBAN:in käyttöön. Käyttäjien määrä on muutenkin kasvussa – 18 uutta maata vuosina 2008-2013 – ja lähes kaikki OECD-maat saattavat tulla mukaan ennen 2010-luvun loppua. Yhdysvalloissa on asetettu työryhmä asiaa selvittämään; jos tämä johtaa positiiviseen tulokseen, useat (kymmenet?) maat voivat seurata esimerkkiä. IVY:n ulkopuolisessa Euroopassa käytännössä kaikki maat ovat mukana.

Varsinainen (suomalainen) tilinumero voidaan tarkistaa siten kuin ao. kappaleessa on kuvattu (älä luota siihen, että tämä pitäisi paikkansa 31.01.2014 jälkeen). Muiden tilinumeroiden täydellinen tarkistaminen olisi monimutkaista. Joissakin maissa kaikkien pankkien tilinumeroille on yhtenäinen tarkistusmenettely, joka on yleensä julkinen, mutta vaihtelee tietysti maasta toiseen. Toisissa maissa käytetään pankkikohtaisia menetelmiä, jotka eivät aina ole julkisia. Joidenkin pankkien tilinumeroissa ei ole tarkistetta lainkaan. Julkisten tietojen perusteella voidaan kuitenkin tarkistaa se, että numeroita ja kirjaimia on käytetty vain sellaisissa positioissa, joissa ne ovat sallittuja. On todellakin ymmärrettävää, että kansainväliseen maksuliikenteeseen on haluttu kehittää yksi yhtenäinen tarkistusmenetelmä.

Internetistä löytyy sivuja, joilla tarjotaan mahdollisuutta muodostaa IBAN mistä tahansa tilinumerosta käyttäen ao. maan maakoodia, mutta näin ei todellisuudessa voi tehdä. IBAN:in muodostaminen edellyttää, että ko. maan pankit ovat sopineet IBAN:in perustana käytettävän BBAN-tilinumeron muodosta, ja tällainen sopimus on tehty vain maissa, jotka ovat liittyneet tai liittymässä IBAN:in käyttäjien joukkoon, eivätkä pankkikohtaiseen tilinumeroon sisältyvät tiedot kaikissa maissa riitä BBAN:in muodostamiseen. Yritys muodostaa IBAN järjestelmän ulkopuolisten maiden tilinumeroista on merkityksetön tai pahimmillaan harhaanjohtava. Toinen tavanomainen virhe mainituilla sivuilla on, että ne sallivat minkä tahansa käytössä olevan maakoodin, vaikka on useita alueita, jotka eivät käytä omia maakoodejaan tällaisessa yhteydessä. Kaiken lisäksi sääntöjen mukaan IBAN:in muodostaminen on tilinpitäjäpankin yksinoikeus.

Päinvastainen muunnos – IBAN:in muuttaminen kotimaiseksi tilinumeroksi – on suomalaisille tilinumeroille helppo. Vaikken tiedä mitään tilannetta, jossa tällaiselle muunnokselle olisi todellista tarvetta, kerron silti miten se tehdään oikein, koska Netissä on asiasta paljon harhaanjohtavaa tietoa: Jätä alusta pois kirjaimet FI ja seuraavat kaksi numeroa. Jäljelle jäävät 14 numeroa ovat suomalainen tilinumero (esim. FI02 2045 3504 1005 27 → 2045 3504 1005 27). Tarvittaessa voit poistaa välilyönnit ja/tai lisätä 6. numeron jälkeen väliviivan (esim. 204535-04100527). Usein neuvotaan myös poistamaan "ylimääräiset" nollat, mutta tämä ei koskaan ole pakollista, ja voi väärin tehtynä pahimmillaan johtaa virheelliseen mutta toimivaan tilinumeroon, jolloin maksu menee väärälle tilille, eli kehotus nollien poistamiseen on vähintään vastuuton – täsmälliseltä näyttävä ohjekaan ei välttämättä sovi kaikkiin tilanteisiin (esimerkkitapauksessa eräät näkemäni ohjeet tuottaisivat muodollisesti moitteettoman mutta silti väärän tilinumeron). Tietysti nollien poistamiseen on oikeakin tapa, mutta käytä sitä vain jos varmasti tiedät mitä olet tekemässä. Muunnosta ei pidä tehdä suomalaisille IBAN:eille joiden 5. merkki on 7, koska tällaiset pankit eivät ole koskaan käyttäneet suomalaisen standardin mukaisia tilinumeroita. Muiden maiden IBAN:eille ei ole yhtenäistä sääntöä.

Netistä löytyvien tietojen mukaan varsinkin Afrikassa on maita, joiden tilinumerot näyttävät IBAN:eilta, mutta joita ei mainita SWIFT:in ylläpitämässä virallisessa IBAN-rekisterissä. Tätä ei tietenkään mikään estä, mutta tällaisille tileille maksettaessa ei välttämättä toteudu IBAN:in tärkein etu: Vastaanottajan tilinumeron oikeellisuuden tarkistaminen ennen maksun lähettämistä, eikä vasta sitten kun maksu on saapunut määräkonttoriin (oikeaan tai väärään) tai pahimmassa tapauksessa väärälle tilille.

Monet näyttävät uskovan, että BBAN ja kansallinen tilinumero ovat sama asia. Joskus ovatkin, mutta yleisesti tähän ei pidä luottaa. Tarkkaan ottaen BBAN on kansallisen tilinumeron esitysmuoto, jonka ainoa tehtävä on toimia IBAN:in muodostamisen lähtökohtana. Alkuperäisen tilinumeron muokkaaminen BBAN:iksi voi sisältää esim. pankkitunnuksen lisäämisen (samalla pankilla voi olla useita erilaisia tunnuksia) ja/tai nollien lisäämisen, jotta BBAN saadaan oikean pituiseksi. Muokkaus on usein pankkikohtainen. Huomaa että joissakin maissa maa- tai pankkikohtaisista tilinumerostandardeista on luovuttu kokonaan, jolloin "alkuperäinen tilinumero" on menettänyt kaiken merkityksensä; Suomessa tämä prosessi on viety melkein loppuun (elokuussa 2013).

Jos kaksinumeroista tarkistetta ei pidetä liian pitkänä, tämä menetelmä sopii mainiosti moneen muuhunkin käyttöön, koska tarkistettavan merkkijonon pituutta ei ole rajoitettu, tarkistuksessa voidaan käsitellä sekä numeroita että kirjaimia, ja virheenpaljastuskyky on erinomainen. Menetelmä sisältyy ISO:n standardiin 7064, mutta kirjainten käsittely on luultavasti standardiin tehty laajennus, ja tarkisteen siirtäminen lähelle merkkijonon alkua poikennee sekin standardista.

Lähteinä on käytetty em. EBS204:n ja SWIFT:in ylläpitämän virallisen IBAN-rekisterin lisäksi mm. Suomen pankkiyhdistyksen (vuoden 2007 alusta Finanssialan keskusliitto) julkaisua "Kansainvälinen tilinumero IBAN (International Bank Account Number) ulkomaan maksuliikenteessä, Ohje ohjelmataloille, 21.09.2000 / V1.0".

Maksuliikenteessä käytetään myös pankki- tai konttorikohtaista BIC-koodia (älä sekoita tätä konttiliikenteen BIC-koodiin) ja joissakin maissa (ei Suomessa) pankki- tai konttorikohtaista clearing-koodia. Clearing-koodin nimi ([National] Clearing Code, Routing Number, Sort Code yms.), muoto ja siten oletettavasti myös mahdollisen tarkisteen laskenta on maakohtainen. BIC-koodissa ei ole tarkistetta, joten se voidaan tarkistaa vain ao. pankin tiedoista tai vertaamalla koodiluetteloon esim. tietokannassa (Bank Identifier Code, tunnetaan kehittäjänsä mukaisesti myös SWIFT-koodina, ISO-standardi 9362). Myös BIC löytyy tiliotteesta. BIC:in käyttö SEPA-alueella päättyy maansisäisissä maksuissa 31.01.2014 ja kansainvälisessäkin rahaliikenteessä IBAN:illa maksettaessa 31.01.2016. SEPA:n ulkopuolella BIC:in käyttö jatkuu.

RF-viite

Tarkisteen lisäys- ja tarkistusohjelma
Juoksevaan numeroon perustuvien suomalaisten viitenumeroiden ja/tai niistä johdettujen RF-viitteiden generointiohjelma
Monimutkaisempien RF-viitteiden generointiohjelma

RF-viite eli KV-viite eli kansainvälinen viite eli kansainvälinen viitenumero eli myyjäviite eli (Global) (Structured) Creditor Reference eli RF Creditor Reference (ISO 11649) on kansainväliseen käyttöön tarkoitettu suomalaista Pankkisiirron viitenumeroa vastaava tunniste, joka rakenteeltaan muistuttaa suuresti Kansainvälistä tilinumeroa (IBAN). RF-viitteitä saa käyttää 01.12.2010 alkaen sekä kotimaisessa että kansainvälisessä rahaliikenteessä. Kuten kotimaisen viitenumeron, myös RF-viitteen tarkoitus on yhdistää vastaanotettu maksu lähetettyyn laskuun, joten RF-viitteenkin tuottaa laskuttaja. Kotimaisia viitenumeroita käytettänee ainakin 31.01.2014 saakka, mutta joskus sen jälkeen RF-viitteet jäänevät ainoaksi vaihtoehdoksi. Varsinaista päätöstä tästä ei kuitenkaan ole vielä tehty (maaliskuussa 2012).

  • RF-viitteen alussa on maatunnuksen sijasta isot kirjaimet RF (sanasta reference; RF ei [maaliskuussa 2013] ole minkään maan tunnus standardissa ISO 3166-1, vaikka se kyrillisillä kirjaimilla kirjoitettuna [РФ] on Venäjän federaation ccTLD Internetissä).
  • Positioissa 3..4 on tarkiste, joka lasketaan aivan samoin kuin IBAN:issa. Tarkistuksessa voidaan käyttää samaa yksinkertaistettua menettelyä kuin IBAN:issa.
  • Painetussa muodossa ryhmittely neljän merkin ryhmiin vasemmalta alkaen kuten IBAN:issa. Konekielisenä yhtenäinen merkkijono.
  • Viitteen sisältö on enintään 21 merkkiä pitkä, numerot 0..9 ja kirjaimet A..Z ovat sallittuja. Kokonaispituus on siis enintään 25 merkkiä. Sisällön minimipituutta standardi ei määrittele, joten yhdenkin merkin pitäisi riittää.
  • Viitteen sisällössä myös pienet kirjaimet ovat sallittuja, mutta ne ovat tarkistetta laskettaessa samanarvoisia kuin isot kirjaimet, joten RF-viitettä ei pitäisi muodostaa niin, että sen merkitys riippuu isojen ja pienten kirjainten välisestä erosta. Ero voi kadota matkan varrella, eikä tarkiste paljasta tällaista muutosta. Tekemäni ohjelmat eivät tuota viitteisiin pieniä kirjaimia, mutta sallivat ne tarkistuksessa.
  • Viitteen sisällön mahdolliset etunollat (tarkistetta seuraavat nollat) eivät vaikuta tarkisteeseen. Jotkin tietojärjestelmät saattavat poistaa tällaiset nollat viitteitä käsitellessään; esim. suomalaisesta pankkiviivakoodista (versio 5) on yleensä mahdotonta päätellä, onko viitteen sisällössä alun perin ollut etunollia. Koska etunollat ovat hyödyttömiä, suosittelen niistä aiheutuvan turhan työn jättämistä teettämättä, vaikka suureksi ongelmaksi ne muodostuvat vain jos joku käyttää niitä kuvitellen niiden olevan merkitseviä (nollien katoaminen voi esim. estää huonosti kirjoitettua ohjelmaa tunnistamasta lähetettyä ja vastaanotettua viitettä samaksi). Tekemäni ohjelmat eivät tuota etunollia RF-viitteiden sisällöön, ja poistavat etunollat RF-viitteitä tarkistettaessa. – Kaikki tämä siis koskee viitteen sisältöä; tarkiste voi alkaa nollalla.
  • Finanssialan keskusliiton julkaisussa "Kansainvälisen viitteen käyttöönotto suomalaisessa yrityksessä 1.12.2010" sanotaan (sivu 4, kappale 2.2): "Suomessa käytettävä kansainvälinen viite on muodostettava nykyisestä suomalaisen standardin mukaisesta viitteestä." Tällöin sisällössä ei tietenkään voi käyttää kirjaimia, ja sisältöön on liitettävä kotimaisen viitenumeron tarkiste. Laskun voi maksaa joko viitenumerolla tai RF-viitteellä, ja molemmissa tapauksissa vastaanottajalle välittyy sama viitetieto. Pankkiviivakoodistandardista ei vielä ole versiota, joka sallisi kirjainten käytön viitteen sisällössä, vaikka versio 5 käyttää RF-viitettä.
Esimerkki RF-viitteestä: RF97 C2H5 OH

  1. Viitteen sisällön loppuun liitetään RF ja kaksi nollaa (C2H5OHRF00).
  2. Korvataan kukin kirjain numeroparilla Taulukon 1 mukaisesti (1221752417271500).
  3. Lasketaan näin saadusta luvusta modulo 97. Tarvittaessa katso Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.
  4. Jakojäännös (1) vähennetään 98:sta. Tulos (97) on tarkiste.
  5. Jos tulos on pienempi kuin 10, lisätään etunolla. Tarkisteen mahdolliset arvot ovat siis 02..98.
  6. Liitetään RF ja kaksinumeroinen tarkiste viitteen sisällön eteen (RF97C2H5OH, paperimuodossa RF97 C2H5 OH).
Tarkistus:
  1. Siirretään RF ja tarkiste viitteen loppuun (C2H5OHRF97).
  2. Korvataan kirjaimet numeropareilla (1221752417271597).
  3. Jaetaan saatu luku 97:llä.
  4. Jos RF-viite on virheetön, jakojäännös on 1 (näin tapahtuu esimerkissä).
Tämä kansainvälinen standardi on kehitetty Suomessa ja Suomen aloitteesta (Olli Kähkönen ja Markku Ranta, Nordea), jotta kansainväliset maksut saataisiin toimimaan yhtä sujuvasti kuin Suomen sisäiset. Standardissa on varauduttu siihen, että tulevaisuudessa otetaan käyttöön muita samankaltaisia tunnisteita, joissa on eri alkukirjaimet.

Lähteenä on monien muiden ohella käytetty Finanssialan keskusliiton (FK) julkaisua "Kansainvälisen viitenumeron (ISO 11649) rakenne ja tarkisteen laskenta 1.11.2009". Julkaisussa oli alun perin virhe, jonka korjaaminen kesti kauan. Korjauksen yhteydessä päiväystä ei muutettu, eikä korjauksesta ole mitään mainintaa, joten eri versioiden erottaminen on vaikeaa jos ei tiedä mistä on kysymys. Jos käytät em. julkaisua, varmista että se on haettu FK:n kotisivulta 23.07.2011 tai myöhemmin.

IPI:n maksunaihekoodi

RF-viite korvannee maksunaihekoodin useimmissa tapauksissa 01.12.2010 alkaen.

Kansainvälisessä maksuliikenteessä käytettävän IPI:n (International Payment Instruction) suomalaista viitenumeroa vastaavan maksunaihekoodin (Details of payment) tarkistus tehdään hyvin samantapaisella menetelmällä kuin IBAN:in. Maksunaihekoodin maksimipituus ilman tarkistetta on 18 merkkiä. Numerot 0..9 ja isot kirjaimet A..Z ovat sallittuja. Koodi on määritelty ECBS:n (European Committee for Banking Standards) standardissa EBS206 (European Banking Standard). Tarkisteen laskenta:

  1. Korvataan kirjaimet numeroilla aivan samoin kuin IBAN:in tarkistuksessa.
  2. Lisätään loppuun kaksi nollaa.
  3. Lasketaan näin saadusta luvusta modulo 97. Tarvittaessa katso Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.
  4. Jakojäännös vähennetään 98:sta. Jos tulos on yksinumeroinen, lisätään etunolla (esim. 98 - 94 = 04). Näin saatu kaksinumeroinen luku on tarkiste.
  5. Alkuperäisen maksunaihekoodin alkuun lisätään tarvittaessa nollia niin, että pituudeksi tulee 18 merkkiä.
  6. Lisätään alkuun tarkiste, jolloin kokonaispituus on 20 merkkiä.
  7. Painetussa muodossa maksunaihekoodi jaetaan välilyönneillä neljän merkin ryhmiin.
Esimerkki: 567812F48K012
  1. 567812F48K012 → 567812154820012
  2. 567812154820012 → 56781215482001200
  3. 56781215482001200 mod 97 = 44
  4. 98 - 44 = 54
  5. 567812F48K012 → 00000567812F48K012
  6. 00000567812F48K012 → 5400000567812F48K012
  7. 5400000567812F48K012 → 5400 0005 6781 2F48 K012
Tarkistus voidaan tehdä kuten IBAN:issa, eli siirretään tarkiste koodin loppuun, korvataan kirjaimet numeroilla ja lasketaan modulo 97. Jos maksunaihekoodi on virheetön, jakojäännös on aina 1 (esim. 0000056781215482001254 mod 97 = 1).

Maksun aihe voi vaihtoehtoisesti olla enintään 35 merkkiä pitkä vapaamuotoinen merkkijono, johon ei liity tarkistetta. IPI:ssä on varattu kenttä sen ilmoittamiseen, kumpaa muotoa käytetään.


Moduli 34

Coden

Coden on kuusimerkkinen tunnus, joita yhdysvaltalainen Chemical Abstracts Service (CAS) antaa julkaisuille. Tunnuksen saa ilmaiseksi, luetteloa julkaisuista ja niiden tunnuksista myydään kalliilla hinnalla. Tunnuksia on kahta päätyyppiä:
  • Sarjamuotoiset julkaisut: AAAAET, jossa AAAA on julkaisun nimestä johdettu mnemoninen (muistamista tukeva) koodi, E erottaa toisistaan koodit jotka muuten olisivat samanlaisia ja T on tarkiste.
  • Yksittäiset julkaisut: NNAAGT, jossa NNAA on julkaisun tunniste ja kaksi viimeistä merkkiä ovat kuten edellä.
A ja G ovat isoja kirjaimia A..Z, N on numero 0..9, E on iso kirjain yleensä aakkosten alkupäästä (A..G) ja T on numero 2..9 tai iso kirjain A..Z.

Esimerkkejä: JPERFA, 53AKAE

Jotkin lähteet esittävät Codenin ilman tarkistetta. Lisäksi Codenin sijasta käytetään joskus 00-alkuista koodia, jossa ei ole tämän kuvauksen mukaista tarkistetta.

Tarkisteen laskenta:

  1. Jokainen tarkistettava merkki korvataan numeroarvolla seuraavien taulukoiden mukaisesti:
    Merkki ABCDEFG HIJKLMN OPQRSTU VWXYZ
    Arvo 1 2 3 4 5 6 7 8 91011121314 15161718192021 2223242526
    Merkki 1 2 3 4 5 6 7 8 9 0
    Arvo 2728293031 3233343536
    Eli myös numerot korvataan toisilla arvoilla. Tätä ei aivan samalla periaatteella tehdä missään toisessa tuntemassani menetelmässä.
  2. Saadut arvot kerrotaan painokertoimilla, jotka ovat vasemmalta oikealle 11, 7, 5, 3, ja 1.
  3. Tulot lasketaan yhteen.
  4. Summa jaetaan 34:llä.
  5. Jos jakojäännös on 1..26, tarkiste on kirjain joka saadaan käyttämällä eo. taulukkoa käänteisesti. Muussa tapauksessa tarkiste on numero 2..9, joka saadaan seuraavasta taulukosta:
    Jakojäännös 272829303132330
    Tarkiste 2 3 4 5 6 7 89
Esimerkki 1: CYSTE3
	  C   Y   S   T   E   3
	  3  25  19  20   5
	 11   7   5   3   1
	 33 175  95  60   5   = 368 ≡ 28 (mod 34) → 3
Esimerkki 2: 48THAM
	  4   8   T   H   A   M
	 30  34  20   8   1
	 11   7   5   3   1
	330 238 100  24   1   = 693 ≡ 13 (mod 34) → M
Huom! Tämä kuvaus ei tarkisteen laskennan osalta perustu mihinkään julkaistuun dokumenttiin, vaan yli 2200 aidon Codenin analysointiin. Tutkituista koodeista 20 (alle 1 %) ei läpäise tässä kuvattua tarkistusta, mutta niistä 19 on ilmeisiä lukuvirheitä, eli joku on lukenut merkin toiseksi hiukan samannäköiseksi tai samalta kuulostavaksi, ja tämä väärä merkki on sitten näppäilty. 16 tapauksessa virhe oli tarkisteessa ja vain 3 tapauksessa varsinaisessa koodissa, joten tekee mieli väittää että tämä menetelmä aiheuttaa itse useimmat niistä virheistä, jotka sen avulla havaitaan. Yhden virheen syntytapa jäi arvoitukseksi; koodi on aivan erilainen kuin ao. julkaisussa. Kuten muutkin kokemukset osoittavat, samat virheelliset koodit löytyvät Internetistä monelta sivulta, mikä viittaa siihen että niitä kopioidaan paikasta toiseen ilman tarkistusta. Myös oikeat versiot löytyvät; kaikissa 20 tapauksessa olen varmistanut, että oikeiksi tulkitsemani versiot ovat todellisia, käytössä olevia koodeja.

Codenin tarkistuksesta olen kirjoittanut myös englanninkielisen kuvauksen, koska sellaista ei näytä Internetistä muualta löytyvän. Kuvaus sisältää hieman lisätietoja em. virheellisistä koodeista.


Moduli 31

Tätä menetelmää käytetään henkilötunnuksen, sähköisen asiointitunnuksen, kiinteistötunnuksen ja Tapiolan vakuutusnumeron tarkistamiseen.

Suomalainen henkilötunnus (HETU)

HETU:n tarkistusohjelma

Henkilötunnuksen avulla ihmiset pystytään yksilöimään erilaisissa hallinnollisissa tietojärjestelmissä.

Vuoteen 1964 saakka tunnuksen nimi oli työeläkekortin numero, ja niitä antoi Eläketurvakeskus (ETK) vuosina 1962..1972. Myöhemmin niitä jakoi myös Kansaneläkelaitos (Kela) vuosina 1964..1974. Vuosina 1964..1970 tunnistetta nimitettiin sosiaaliturvatunnukseksi eli sotuksi. Vuoden 1971 alusta nimi on ollut henkilötunnus, ja nykyisin sellaisen antaa Väestörekisterikeskus (VRK) jokaiselle Suomen kansalaiselle, sekä ulkomaalaisille joilla on Suomessa kotipaikka. Tämän mukaisesti on joskus käytetty myös nimeä väestörekisteritunnus. Väestörekisterikeskuksen kotisivulla annettu englanninkielinen nimi on Personal Identity Number, joka lienee virallinen käännös. Tämä voidaan lyhentää PIN, mutta on muistettava että samaa lyhennettä käytetään myös muista koodeista. Henkilötunnus on määritelty Väestötietoasetuksessa (886/1993).

Henkilötunnus on muotoa PPKKVVSNNNT, jossa:
PPKKVV Syntymäaika; päivä, kuukausi ja kaksi viimeistä numeroa vuosiluvusta; tarvittaessa käytetään etunollia. Myös 29.2. voi olla henkilötunnuksessa syntymäpäivänä, esim. 290272.
S Vuosiluvun kaksi ensimmäistä numeroa osoittava välimerkki, "+" 1800-luvulla syntyneillä, "-" 1900-luvulla syntyneillä, "A" (iso A-kirjain) 2000-luvulla syntyneillä (asetus 84/1997).
NNN Yksilönumero, etunollitettu, naisilla parillinen, miehillä pariton. Sukupuolen selvittämiseen riittää tietysti kentän viimeisen numeron tutkiminen.
T Tarkistusmerkki.

Tarkistusmerkin laskenta: Numeroiden PPKKVVNNN muodostama luku jaetaan 31:llä. Jos jakojäännös on yksinumeroinen, se on tarkistusmerkki. Muuten jakojäännös määrää tarkistusmerkkinä käytettävän kirjaimen seuraavasti:

10 A11 B12 C13 D 14 E15 F16 H
17 J18 K19 L20 M 21 N22 P23 R
24 S25 T26 U27 V 28 W29 X30 Y

Esimerkki: 120464-126J

  • "-" osoittaa että henkilö on syntynyt 1900-luvulla
  • 12.04.1964 on virheetön päivämäärä
  • 126 on parillinen, joten kyseessä on nainen
  • 120464126 mod 31 = 17 → J joten tunnus hyväksytään

Mahdollisia lisätarkistuksia: Päivämäärän muoto voidaan tarkistaa – ja kannattaa tarkistaa, sillä tarkistemerkki paljastaa tietyt päivämääräkentän sisältövirheet varmuudella vain jos päiväys on muodollisesti virheetön; vrt. Ruotsalainen henkilötunnus. Missään virheettömässä henkilötunnuksessa ei voi esiintyä syntymäaikoja, jotka ovat varhaisempia kuin 1850. Tulevaisuuteen sijoittuvien syntymäaikojen pitäisi myös olla mahdottomia (henkilötunnuksia ei anneta etukäteen). Tapauksesta riippuen rajaus voisi olla tiukempi; esim. hyväksytään vain täysi-ikäiset henkilöt. Yksilönumero ei koskaan ole pienempi kuin 002. Muutkin rajaukset yksilönumerossa ovat periaatteessa mahdollisia, mutta edellyttäisivät lisätutkimuksia.

Välimerkki ei vaikuta tarkisteeseen. Katso kohtaa Muutosten ennakointi.

Henkilötunnuksen pääasiallinen kehittäjä oli henkivakuutusyhtiö Salaman johtaja, matemaatikko ja sota-ajan legendaarinen salakirjoitusekspertti Erkki Pale, joka oli lainattu suunnittelupäälliköksi ETK:n tietojenkäsittelyä hoitaneeseen Oy Tietokonepalvelu Ab:hen. Apuna toimi matemaatikko Matti Kurimo. Mallia otettiin ruotsalaisesta henkilötunnuksesta, mutta syntymäajan järjestys vaihdettiin, välimerkin käyttöä selkiytettiin ja tarkiste lisättiin (ruotsalaisessa tunnuksessa tarkiste otettiin käyttöön viisi vuotta myöhemmin).

Ajokorteissa, Kela-korteissa ja vuoden 2004 kesäkuusta alkaen annetuissa henkilökortin ja Kela-kortin yhdistelmissä on henkilötunnuksen sisältävä Code 39 -viivakoodi, joka voidaan lukea mm. kauppojen hinnantarkistuspisteissä, vaikka ne on tarkoitettu Tuotekoodien lukemiseen. Jotkin laitteet saattavat antaa pelkän virheilmoituksen tuntemattomasta tuotteesta, mutta toiset näyttävät lisäksi lukemansa tunnuksen. Jos henkilötunnuksesi tunnistetaan tuotteeksi, voi olla syytä huolestua.

Olen nähnyt sanomalehdessä kuvan aidosta ajokortista, josta henkilötunnus (tässä tapauksessa tarkkaan ottaen ajokortin numero) oli poistettu, mutta viivakoodi oli jätetty näkyviin. Vaikka koodin loppuosa oli hiukan tuhruinen, tunnuksen 280264-051U lukeminen onnistui ensimmäisellä yrityksellä, osittain siksi että ko. viivakoodi sietää häiriöitä melko hyvin. Henkilötunnus on tässä suhteessa poikkeuksellisen helppo kohde. Saman lehden toisessa numerossa passin tunnistetietosivulta varsinainen henkilötunnus oli peitetty peukalolla, mutta alemmalta koneellisesti luettavalta riviltä tunnus 140457-107D oli helposti nähtävissä. Pelkän tunnuksen tietäminen ei vie pitkälle, mutta koska artikkeleissa kerrottiin myös muita tietoja kuten nimi, kotipaikka ja ammatti, tämä on selvä tietoturvariski.

Lehtitietojen mukaan erityisesti Pohjois-Suomessa aikaisemmilla vuosikymmenillä syntyneiden henkilöiden syntymäpäivät on monesti kirjattu väärin. Tietoja on ilmeisesti kirjattu nipuissa kunkin kuukauden 15. ja viimeinen päivä, jonka vuoksi nämä päivät esiintyvät syntymäpäivinä tavallista useammin. Yleisöltä maaliskuussa 2003 saatujen tietojen mukaan nykyisinkin esiintyy tapauksia, joissa henkilön tarkkaa syntymäpäivää ei tiedetä (esim. pakolaiset), jolloin päiväksi usein kirjataan 0101, mikä voi myöhemmin korjaantua, jos tarkempia tietoja saadaan. Molempien ilmiöiden kerrotaan näkyvän tilastopiikkeinä.

Olen tuntenut henkilön, joka ei ollut tunnistanut omaa syntymäaikaansa henkilötunnuksessaan ("ylimääräiset" nollat hämäsivät), eikä sen vuoksi ollut oppinut "pitkää" numerosarjaa ulkoa.

Joskus voi olla tarpeen syöttää henkilötunnuksia järjestelmään, jossa kirjaimia voidaan näyttää, mutta kirjainnäppäimistö puuttuu. Tällöin voidaan jättää syöttämättä tarkiste, jonka järjestelmä voi laskea ja näyttää, jolloin käyttäjä voi verrata näytettyä tarkistetta alkuperäiseen. Myös välimerkin syöttäminen voi olla ongelma, mutta se on usein kierrettävissä ohjelmallisella päättelyllä, tai jos näin ei voi tehdä, välimerkki voidaan syötössä korvata numerolla, esim. "-" → 1900-luku → syötetään 9. Aiemman esimerkin tunnus siis syötettäisiin esim. muodossa 1204649126, jonka jälkeen sovellus näyttäisi joko pelkän tarkisteen tai mieluummin koko tunnuksen 120464-126J.

Säännöllinen lauseke (Regular expression, RegExp)

Täydellisen muototarkistuksen tekeminen henkilötunnukselle säännöllisen lausekkeen avulla olisi luultavasti vaikeampaa kuin saman asian hoitaminen ohjelmakoodissa, mutta aika pitkälle pääsee tällä:

^(0[1-9]|[12]\d|3[01])(0[1-9]|1[0-2])([5-9]\d+|\d\d-|[01]\dA)\d{3}[\dA-Z]$

Rajoituksia:

  • Lauseke varmistaa että kuukauden päivä on 01..31 ja kuukausi 01..12, mutta ei ota huomioon kuukausien pituuksia. Tämäkin riittää takaamaan että 42. päivä tuohikuuta ei kelpaa syntymäpäiväksi.
  • Lauseke sallii vuosiluvut 1850..2019. Lauseketta on siis päivitettävä ennen vuotta 2020, tai lauseke voidaan tuottaa ohjelmallisesti.
  • Lauseke sallii yksilönumerot 000..999, vaikka todellisuudessa numerot alkavat 002:sta.
  • Lauseke sallii tarkisteena 26 kirjainta A..Z, vaikka vain 21 kirjainta on todella käytössä (voidaan odottaa että luvattomat kirjaimet havaitaan tarkistetta laskettaessa).
  • Lauseke edellyttää isoja kirjaimia, mutta jos ohjelma ei tällaisessa tapauksessa muuta käyttäjän syöttämiä pieniä kirjaimia isoiksi, ohjelman kirjoittaja syyllistyy törkeään laiskuuteen; tietokannassa tms. on joka tapauksessa aiheellista käyttää isoja kirjaimia. Selaimessa asian voi hoitaa tyylisäännölläkin.
Vertailu säännölliseen lausekkeeseen ja tarkisteen oikeellisuuden varmistaminen voivat kuitenkin hyvin riittää useimpien virheiden havaitsemiseen esim. nettisivulla (serverissä on joka tapauksessa tehtävä perusteellinen tarkistus), jos tyydytään vain ilmoittamaan että syöttötieto on virheellinen, mutta ei kerrota tarkemmin millä tavalla. Useimmat tunnisteet ovat rakenteeltaan henkilötunnusta yksinkertaisempia, jolloin säännölliseen lausekkeeseen perustuva tarkistus toimii paremmin.

Henkilötunnuksen käyttö Suomessa

Ihmisestä voisi luoda aika kattavan profiilin yhdistämällä kaikki tiedot joihin liittyy henkilötunnus tai toteamalla että jotakin tietoa ei löydy. Olen yrittänyt luetella tässä joitakin mieleen tulleita asioita, joita Suomen kansalainen tai sellaisena esiintyvä ei tietääkseni voi Suomessa tehdä – ainakaan laillisesti – ilman henkilötunnusta:
  • Asua missään (ei voi tehdä ilmoitusta maistraattiin)
  • Tehdä ansiotyötä tai asioida työvoimatoimistossa
  • Hankkia ajokorttia
  • Solmia avioliittoa tai rekisteröidä parisuhdetta
  • Vaihtaa etu- tai sukunimeä
  • Olla holhouksen alaisena tai tällaisen henkilön edunvalvojana
  • Yöpyä hotellissa, motellissa tms.
  • Hoitaa julkista luottamustehtävää (kansanedustaja, kunnanvaltuutettu ym.)
  • Toimia järjestyksenvalvojana
  • Tehdä kaivosvaltausta
  • Hankkia kirjastokorttia
  • Opiskella koulussa tai muussa oppilaitoksessa
  • Metsästää
  • Käyttää neuvola- tai terveyspalveluja, ml. silmälasien hankkiminen optikolta
  • Avata pankkitiliä → ei pankki- tai luottokorttia, ei pankkilainaa (ei myöskään kirjautumista pankkitunnuksia vaativiin palveluihin Internetissä eikä käyttöoikeutta toisen pankkitiliin)
  • Saada panttilainaa
  • Saada perintöä
  • Ottaa vastaan kirjattua tai vakuutettua postilähetystä, tai mitä tahansa postilähetystä pelkällä lähetystunnuksella (ilman saapumisilmoitusta), jos posti vaatii henkilötunnuksen
  • Toimia radioamatöörinä tai harrastuslentäjänä
  • Saada rekisteröidyksi kiinteää omaisuutta, tai useita muita rekisteröitäviä omaisuuden lajeja (ml. arvo-osuusjärjestelmään merkittävät arvopaperit, useimmat moottoriajoneuvot ja kaikki tuliaseet)
  • Kuulua rekisteröityyn uskonnolliseen yhdyskuntaan
  • Toimia rekisteröidyn yhdistyksen puheenjohtajana tai nimenkirjoittajana
  • Antaa tai saada rekisteröitävää lahjaa
  • Tehdä rikosilmoitusta
  • Saada sosiaaliturvaa tai eläkettä
  • Toimia säätiön hallituksessa
  • Matkustaa ulkomaille (passi, henkilökortti)
  • Ottaa vakuutusta
  • Äänestää valtiollisissa tai kunnallisissa vaaleissa tai kansanäänestyksessä
  • Luovuttaa verta
  • Lisäksi monilla yrityksillä ja laitoksilla on oikeus kieltäytyä lainauksesta, vuokrauksesta tai jälkikäteen laskutettavien tavaroiden tai palvelujen toimittamisesta henkilöille, jotka eivät ilmoita henkilötunnustaan
Eipä tarvitse myöskään maksaa välittömiä veroja eikä mennä armeijaan. Ilman henkilötunnusta voi hakea patenttia tai kuulua rekisteröityyn yhdistykseen tai puolueeseen. Otan hyvin mielelläni vastaan ilmoituksia virheistä ja varsinkin puutteista (referenssin kanssa). Huomaa kuitenkin että:
  • Listan toinen kohta kattaa jo kaikki ammatit, joihin liittyy jokin ilmoitusvelvollisuus, luvanvaraisuus tai rekisteröityminen (esim. toiminta ammattilentäjänä).
  • Tässä ei kaivata mitään kuukausilippujuttuja, vaan pääsääntöisesti asioita jotka jollakin tavalla perustuvat säädökseen tai viranomaismääräykseen.

Olen lukenut väitteen, että Suomessa olisi satoja suomalaisia, joilla ei ole henkilötunnusta ja jotka siis puuttuvat väestötietojärjestelmästä. Mitään perustelua ei tietenkään esitetty. Asia on luonteeltaan vaikeasti tilastoitava, mutta en oikein osaa kuvitella, että tilanne Suomessa voisi hyvin oleellisesti poiketa Tanskasta: Lukemani tutkimuksen mukaan siellä tavattiin 15 vuoden aikana kuolleina vain kaksi ihmistä, joita ei löytynyt väestötietojärjestelmästä, vaikka olisi pitänyt. Ekstrapoloimalla tunnuksettomien ihmisten kokonaismääräksi saadaan noin kymmenen. Menetelmä ei tietenkään ole täysin luotettava, mutta antanee suuruusluokan. Veikkaan että se antaa paremminkin ylä- kuin alarajan.

Henkilötunnukset muissa maissa

Suomalaista vastaava henkilötunnus ei ole aivan yleismaailmallinen ilmiö, mutta mm. Pohjoismaissa ja Baltiassa niitä käytetään. Tunnukset ovat hiukan eri muotoisia, mutta kaikki sisältävät lähes täsmälleen samat tiedot: Yksilönumero, sukupuoli (paitsi ehkä Islannissa ja Latviassa), tarkiste ja syntymäaika, jossa vuosiluku on kaksinumeroinen mutta kaksi ensimmäistä numeroa ovat pääteltävissä jostakin muusta kohdasta. Vielä oleellisempaa on se, että tunnuksia käytetään paljolti samalla tavalla. Muuallakin tunnuksia toki on, mutta niiden käytössä on suurta vaihtelua. Aivan ilmeisesti yhdessäkään Pohjoismaassa ei ole alun perin otettu kunnolla huomioon sitä, että tunnukset eivät saisi loppua kesken edes muutamassa vuosisadassa. Esim. Virossa tämä on ymmärretty, mutta siellä koko järjestelmä onkin paljon uudempi.

Taulukko on osittain koottu epävirallisten lähteiden perusteella.

IslantiPPKKVV-NNTS
(kennitala)
S: Vuosiluvun kaksi ensimmäistä numeroa osoittavaa numeroa ei oteta huomioon tarkistetta laskettaessa
Tunnuksesta ei (luultavasti) voi päätellä sukupuolta
LatviaPPKKVV-NNNNT
(personas kods)
NNNN: Ensimmäinen numero saattaa osoittaa vuosiluvun kaksi ensimmäistä numeroa
Tunnuksesta ei voi päätellä sukupuolta
Liettua, ViroSVVKKPPNNNT
(asmens kodas,
isikukood)
S: Numero osoittaa sekä henkilön sukupuolen että vuosiluvun kaksi ensimmäistä numeroa
NorjaPPKKVVNNNTT
(fųdselsnummer)
NNN: Yksilönumero osoittaa myös henkilön sukupuolen ja yhdessä vuosiluvun kahden viimeisen numeron kanssa vuosiluvun kaksi ensimmäistä numeroa
TT: Tarkisteita on kaksi
RuotsiVVKKPPSNNNT
(personnummer)
S: Välimerkki vaihdetaan kun henkilö täyttää sata vuotta; välimerkkiä ei oteta huomioon tarkistetta laskettaessa
NNN: Yksilönumero osoittaa myös sukupuolen
SuomiPPKKVVSNNNT
(henkilötunnus)
S: Vuosiluvun kaksi ensimmäistä numeroa osoittavaa välimerkkiä ei oteta huomioon tarkistetta laskettaessa
NNN: Yksilönumero osoittaa myös sukupuolen
TanskaPPKKVV-SNNT
(CPR-nummer,
personnummer)
S: Yksilönumeron ensimmäinen numero yhdessä vuosiluvun kahden viimeisen numeron kanssa osoittaa vuosiluvun kaksi ensimmäistä numeroa
T: Tarkiste osoittaa myös sukupuolen; tammikuussa 2005 ilmoitettiin, että tulevaisuudessa viimenen numero ei enää toimi tarkisteena

Joskus näkee myös mainintoja "tulossa olevasta EU-henkilötunnuksesta", mutta sitä saatanee ainakin virallisesti odottaa vielä pitkään, sillä kaikissa maissa ei ole Pohjoismaistyyppistä väestötietojärjestelmää, ja historiallisista syistä esim. Saksa ja Yhdistynyt kuningaskunta hyvin luultavasti vastustavat tällaista tunnusta kaikin keinoin. Portugalissa perustuslaki nimenomaan kieltää yleiskäyttöiset henkilötunnukset. Tietysti on mahdollista, että vainoharhainen terroristijahti muuttaa ainakin hallitusten näkemyksiä.

01.06.2004 otettiin ETA-maissa ja Sveitsissä käyttöön Eurooppalainen sairaanhoitokortti (European Health Insurance Card, EHIC-kortti). Jos kortissa oleva numero on Euroopan laajuisesti yksilöivä (kuten hyvin luultavasti on), se voi myöhemmin vaivihkaa levitä muuhun käyttöön, koska monissa maissa on nähty että siihen tällaisilla tunnuksilla on hyvin suuri potentiaali. Eräät yksityisyyttä puolustavat kansalaisjärjestöt tuomitsivat kortin jyrkästi jo ennen sen käyttöönottoa. Kortti on kuitenkin toistaiseksi vain harvoilla, koska sitä ei anneta pyytämättä. – Myöhempi havainto: Numero ei pysy samana kortin vaihtuessa, mikä vaikeuttaa numeron käyttöä henkilön yksilöintiin.

Esimerkiksi Yhdysvalloissa käytettävä Social Security Number (SSN) ja Kanadassa käytettävä Social Insurance Number (SIN) eivät vastaa Suomalaista henkilötunnusta, koska niitä ei ole annettu kaikille kansalaisille.

Suomalaisen henkilötunnuksen yksilönumerosta

Henkilötunnusten yksilönumeroista liikkuu paljon vääriä tietoja, joiden levittämiseen syyllistyvät joskus sellaisetkin henkilöt, jotka voisivat helposti päästä käsiksi luotettaviin ensikäden tietoihin ennen kuin puhuvat läpiä päähänsä. Yritän tässä oikoa eräitä vastaan tulleita virheitä, vaikkei asia varsinaisesti tähän dokumenttiin kuulukaan. Ne joita asia ei kiinnosta, voivat toki ohittaa tämän kappaleen.

1900-luvulla numeroita on pääsääntöisesti jaettu siten, että numerointi aloitetaan kunakin päivänä 002:sta (tytöt) tai 003:sta (pojat). Tunnuksia jakoi siis ensin Eläketurvakeskus ja myöhemmin Kansaneläkelaitos, mutta 1964..1972 molemmat jakoivat tunnuksia samanaikaisesti. Jottei samaa tunnusta annettaisi kahdelle ihmiselle, ETK jakoi 1946 ja sitä ennen syntyneille numeroita väliltä 002..449 ja Kela väliltä 450..999. 1947 ja sen jälkeen syntyneille Kela jakoi numeroita väliltä 002..549 ja ETK väliltä 550..999. Jotta mahdollisimman harvoille ihmisille tulisi useampia tunnuksia, laitokset vaihtoivat tietoja, mutta reaaliaikaisia järjestelmiä ei tuolloin ollut. Numeroita ei siis ole aina jaettu aukottomina sarjoina, kuten joskus luullaan. Lähde: Tietotekniikan alkuvuodet Suomessa, Suomen Atk-kustannus Oy, 1993, ISBN 951-762-182-5, ss. 189..204, Henkilötunnus: Kansalaisen tunnistusongelman ratkaisu 1960-luvulla.

Aikalaismuistikuvana minulle on kerrottu, että Kela antoi tunnuksia aluksi vain niille, jotka joutuivat tekemisiin Kelan kanssa joko sosiaaliturvaan tai terveyshuollosta maksettaviin korvauksiin liittyen, ja vasta kun suurin osa työeläkkeiden piiriin kuulumattomista oli saanut tunnuksensa tällä tavalla, tunnukset jaettiin yhtenä massaoperaationa kaikille, joilta sellainen vielä puuttui – tai yritettiin jakaa, ihan kaikkien kohdalla tämä ei tietysti onnistunut, vaan yksittäistapauksissa tunnuksia annettiin myöhemminkin. Tuo massaoperaatio tapahtui ehkä vasta kirjanpidon siirryttyä VRK:lle.

1900-luvulla numerointi alkoi siis pääsääntöisesti kakkosesta, eli 000 ja 001 eivät ole käytössä. Syy tähän ei näytä enää olevan edes Väestörekisterikeskuksen ylitarkastajan tiedossa. Asia on päätetty ETK:ssa, päättäjät ovat jääneet eläkkeelle, eivätkä he ilmeisesti dokumentoineet perustelujaan. Oma arvaukseni on, ettei kenenkään haluta olevan ykkönen (eikä myöskään täysi nolla), aivan samoin kuin vaaleissa ei ole ehdokasta numero yksi. Numeroinnin alkaminen kakkosesta on kuitenkin kiistaton fakta.

Nykyisin numeroiden jakaminen ilmeisesti aloitetaan kunakin päivänä 500:sta. Tässä kohdassa, kuten joissakin muissakin teksteissä, on aikaisemmin annettu ymmärtää että muutos suurempiin numeroihin olisi tapahtunut 01.01.2000, mutta erään henkilörekisterin tutkiminen on johtanut päätelmään, että muutos onkin tapahtunut jo 01.07.1997. Syy muutokseen voisi olla 01.07.1962 voimaan tullut Työntekijäin eläkelaki (TEL, 395/1961), jonka nojalla pieniä yksilönumeroita alettiin jakaa 01.07.1897 ja myöhemmin syntyneille, jolloin sata vuotta myöhemmin olisi tullut tarve siirtyä suurempiin numeroihin – tosin tunnuksia jaettiin vain poikkeustapauksissa ennen 01.07.1907 syntyneille. Tiedossa ei ole, koskeeko uusi numerointitapa vain 01.07.1997 alkaen syntyneitä, vai myös aikaisemmin syntyneitä, jotka saavat henkilötunnuksen myöhemmin (esim. Suomeen pysyvästi muuttavat ulkomaalaiset). Ensimmäinen vaihtoehto tuntuu loogisemmalta.

Sadan vuoden välein syntyneille ei anneta samoja yksilönumeroita, joten yksilöt ovat erotettavissa vaikka välimerkki puuttuisi tai olisi virheellinen. Toiselle henkilölle ei muutenkaan anneta tunnusta, joka on kerran jollekulle annettu, vaikka tunnus jostakin syystä poistuisi käytöstä (mahdollisia syitä on useita). Olisi kiva tietää miten aiotaan selvitä sitten kun suurten ikäluokkien syntymästä tulee kuluneeksi sata vuotta, kun joidenkin päivien kohdalla on jo nyt tungosta. Ongelmat alkavat viimeistään 2040-luvun alussa (eikä puolivälissä, kuten voisi luulla), ja Väestörekisterikeskuksessa lienee jo nyt suunnitelma siitä miten asia hoidetaan, mutta julkisesti sitä ei ilmeisesti ole kerrottu. Erään lehtitiedon mukaan 2000-luvulla voidaan ottaa käyttöön kirjainten ja numeroiden yhdistelmiä (artikkelissa väitettiin myös ettei tämä vaikuttaisi tarkisteen laskentaan, mikä on ilmeinen mahdottomuus). Ehkä em. asiat liittyvät toisiinsa.

Joskus tapaa väitteitä joiden mukaan Suomessa asuville ulkomaalaisille ja eräille muille ryhmille annettaisiin henkilötunnuksia, joissa yksilönumerointi aloitetaan esim. 700:sta tai jostakin vielä suuremmasta luvusta. Erään tuntemani alankomaalaisen vuonna 1998 annetussa suomalaisessa henkilötunnuksessa yksilönumero on pienempi kuin 300. Erään pakolaisena Suomeen tulleen ja myöhemmin Suomen kansalaisuuden saaneen irakilaisen henkilötunnuksessa yksilönumero on pienempi kuin 200, ja tunnus on pysynyt samana alusta alkaen. Teoria ei siis ainakaan näissä tapauksissa ole oikea. Hiukan perää tällaisissa väitteissä silti on: Yksilönumerot 900..999 on varattu valtionhallinnon käyttöön. Ainakin Helsingin ja Jyväskylän yliopistot ovat antaneet tällaisia tunnuksia ulkomaisille opiskelijoilleen ja/tai työntekijöilleen, mutta nämä eivät ole virallisia Väestötietojärjestelmään kirjattuja tunnuksia. Vastaavaa käytäntöä harjoitetaan joissakin muissa laitoksissa, kuten sairaaloissa, kun kyseessä on henkilö jolla ei ole aitoa suomalaista henkilötunnusta, esim. ulkomaalaiset. Käytäntö on koskenut myös vastasyntyneitä, mutta vuoden 2005 lopulta alkaen kaikki sairaaloissa syntyvät saavat heti pysyvän henkilötunnuksen. Ilmeinen tarkoitus on välttää päällekkäisyyttä todellisten tunnusten kanssa ja tehdä nämä laitosten sisäiset tunnukset helposti muista erottuviksi. Virallisissa henkilötunnuksissa tällainen erottelu antaisi varmasti joillekin tahoille aiheen valittaa syrjinnästä, kuten Ruotsissa kerrotaan tapahtuneen. Onhan ihmisten jakamista eriarvoisiin ryhmiin epäilty jopa sillä perusteella, että jotkin henkilötunnukset päättyvät numeroon ja toiset kirjaimeen, vaikka tämä asia määräytyy varsin satunnaisesti. Tosin jos vuonna 2100 henkilötunnuksen välimerkiksi otetaan B, niin silloin Suomessa on kirjaimellisesti A- ja B-kansalaisia.

Kerrotaan että joillekin yksilöille olisi annettu "väärän" sukupuolen henkilötunnus, mutta Väestötietoasetus velvoittaa maistraatit korjaamaan tällaiset virheet viipymättä, joten kyseessä ei pitäisi olla pysyvä tilanne.

Lähteinä on käytetty mm. Jere Käpyahon artikkelia Tarkista henkilötunnus Pascalilla, Mikrobitti 1/2000, ss. 70..73, sekä saman kirjoittajan viestiä Internetin keskusteluryhmässä sfnet.atk.ohjelmointi 02.12.1999. Joitakin yksityiskohtia on tarkistettu tutkimalla n. 30 000 aitoa henkilötunnusta.

Sähköinen asiointitunnus (SATU)

SATU:n tarkistusohjelma

Väestörekisterikeskuksen (VRK) luonnolliselle henkilölle antama Sähköinen AsiointiTUnnus SATU on määritelty laissa 21.8.2009/661 ja asetuksessa 25.2.2010/128. Tunnus on julkinen ja sitä käytetään – hyvin harvoin – sähköisen henkilökortin (FINEID, Finnish Electronic ID Card) välityksellä henkilön tunnistamiseen mm. Internetissä erilaisia viranomaispalveluita käytettäessä, ja se on samalla tavalla yksilöivä kuin henkilötunnus, mutta ei sisällä henkilöön liittyviä tietoja, eli se on ns. "tyhmä" tunniste. SATU on keskeinen tekijä Henkilön Sähköisessä Tunnistamisessa (HST). Tunnuksessa on kahdeksan numeroa ja tarkiste, joka voi olla numero tai kirjain. Tarkiste lasketaan samalla periaatteella kuin henkilötunnuksessa.

Esimerkki: 10011187H (aito, löydetty Väestörekisterikeskuksen kotisivulta)

10011187 mod 31 = 16 → H

SATU on englanniksi FINUID (Finnish Unique Identification Number).

Kiinteistötunnus

Väestötietoasetus (886/1993 14§) määrää, että kiinteistötunnuksessa voidaan (mutta ei ole pakko) käyttää tarkistusmerkkiä, joka lasketaan samalla periaatteella kuin henkilötunnuksessa. Julkisen hallinnon suositus (JHS) numero 101 sisältää asiasta yksityiskohtaisemman kuvauksen, mutta tämä suositus on korvattu JHS 138:lla, josta tarkiste vain mainitaan. Kiinteistörekisteriasetuksessa (970/1996), jossa muuten määritellään kiinteistötunnuksen muoto, tarkistetta ei edes mainita. Koska Väestötietoasetuksen ja JHS 101:n mukaisia tarkisteita kuitenkin näkee joskus (harvoin) käytettävän, kuvaus on otettu tähän dokumenttiin.

Tunnus muodostuu neljästä osasta, jotka ovat (suluissa kyseisen osan pituus; kentät etunollitetaan tarvittaessa):

  1. Kunta (3)
  2. Sijaintialue (3)
  3. Ryhmä (4)
  4. Yksikkö (4)
Kiinteistötunnus esitetään 14-numeroisena (+ tarkiste, joka voi olla myös kirjain), esim. 42740300020017, tarkisteellisena 42740300020017D.

Tarkisteen laskeminen: Kiinteistötunnus jaetaan 31:llä. Jakojäännös määrää tarkisteen kuten henkilötunnuksessa. Esimerkki:

30100101130004 mod 31 = 21 → N

eli tarkisteellinen tunnus on 30100101130004N.

Yksi käytännön ongelma on se, että 14-numeroisen luvun jakaminen voi tuottaa vaikeuksia joillekin ohjelmointikielille. Tarvittaessa katso Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.

Tapiolan vakuutusnumero

Eri vakuutusyhtiöillä ei näytä olevan yhtenäistä käytäntöä vakuutusnumeroiden (vakuutustunnusten) muodostamisessa. Havaituissa tapauksissa (12 kpl) Tapiolan vakuutusnumerot ovat muotoa 999-9999999-X, jossa "9" on numero ja "X" on tarkiste, joka lasketaan kuten Suomalaisessa henkilötunnuksessa. Esimerkki: 353-3590353-K:
	3533590353 mod 31 = 18 → K
Muiden vakuutusyhtiöiden mahdollisesti käyttämiä tarkisteita en ole onnistunut selvittämään.


ISBN- ja ISSN-numero

Tuotekoodin muodostamiseen ISBN- tai ISSN-numerosta on olemassa standardimenettely. ISBN- tai ISSN-numero on myös osa BICI tai SICI -tunnistetta.

Samaa tarkistusta sovelletaan hiukan muunnellen moottoriajoneuvon sarjanumeroon sekä kemikaalin indeksi- ja EINECS-numeroon.

ISMN, ISWC, ISAN ja ISTC ovat rinnakkaisia järjestelmiä, mutta niiden tarkisteet lasketaan eri tavoilla.

ISBN-numero

ISBN-numeron tarkistusohjelma

Tässä kuvattu ISBN-järjestelmä (ISO-standardi 2108) otettiin käyttöön vuonna 1972. 01.01.2007 se korvattiin uudella ISBN-13:lla, ja samalla tarkisteen laskentatapa vaihtui. Vanhan järjestelmän kuvaus säilytetään kuitenkin tässä dokumentissa, koska sen mukaisia koodeja on miljardeissa julkaisuissa, ja tulee olemaan pitkälle tulevaisuuteen. Erotukseksi uudesta vanha järjestelmä tunnetaan nykyisin myös nimellä ISBN-10.

ISBN = International Standard Book Number. Tällainen numero löytyy useimpien kirjojen takakannesta, mutta sen voi löytää muistakin julkaisuista, kuten kartoista ja CD-ROM:eista. Numero muodostuu yhdeksästä numerosta ja tarkistemerkistä, joka voi olla numero tai X-kirjain. ISBN-numero voidaan jakaa (standardin mukaan väliviivoilla, mutta käytännössä joskus välilyönneillä tai pisteillä) neljäksi ryhmäksi: Maa tai kielialue, kustantaja, nimike ja tarkistemerkki. Viimeisenä oleva tarkistemerkki on aina omana ryhmänään, mutta muuten ryhmien koot eivät ole kiinteät, vaikka numeroiden kokonaismäärä on vakio. Kenttien mahdolliset etunollat ovat merkitseviä, eli niitä ei saa jättää pois. Tarkistemerkin laskennassa otetaan huomioon vain numerot, joten ryhmittely ei siihen vaikuta. Tarkistusmenetelmä tunnetaan nimellä Moduli 11, mutta samalla nimellä viitataan muihinkin menetelmiin, joissa lukua 11 käytetään jakajana. ISBN-numeroiden tapauksessa menetelmästä on kaksi versiota, jotka kuitenkin tuottavat saman tarkisteen.

Laskentatavasta riippumatta tämän menetelmän virheenpaljastuskykyä pidetään varsin hyvänä.

Laskentatapa 1

Numeroita painotetaan kertoimilla, jotka ovat samat kuin numeroiden positiot 1..9 vasemmalta oikealle. Tulot lasketaan yhteen ja summa jaetaan 11:llä. Jos jakojäännös on 0..9, se on tarkistusmerkki. Jos jakojäännös on 10, tarkistusmerkki on X (= 10 roomalaisilla numeroilla).

Esimerkki 1: 0-14-007621-2 (Isaac Asimov, Asimov's New Guide to Science, Penguin Books 1987)

	0  1  4  0  0  7  6  2  1  2
	1  2  3  4  5  6  7  8  9
	0  2 12  0  0 42 42 16  9  = 123 ≡ 2 (mod 11)
Esimerkki 2: 951-0-20711-X (Petteri Järvinen, Windows 95 Käyttäjän käsikirja, WSOY 1995)
	9  5  1  0  2  0  7  1  1  X
	1  2  3  4  5  6  7  8  9
	9 10  3  0 10  0 49  8  9  = 98 ≡ 10 (mod 11) → X

Laskentatapa 2

Tämä on se tapa joka kuvataan useimmissa lähteissä, mutta yleensä esitetään vain miten numero tarkistetaan (mihin menetelmä paremmin soveltuukin), ei sitä miten tarkiste muodostetaan. Numeroita painotetaan kertoimilla 10..2 vasemmalta oikealle ja tulot lasketaan yhteen. Tarkiste on luku, joka summaan on lisättävä, jotta tulos olisi tasan jaollinen 11:llä. Jos lisättävä luku on 10, tarkiste on X.

Esimerkki 1: 0-14-007621-2

	 0  1  4  0  0  7  6  2  1  2
	10  9  8  7  6  5  4  3  2
	 0  9 32  0  0 35 24  6  2  = 108 ≡ 9 (mod 11)
	                              11 - 9 = 2
Esimerkki 2: 951-0-20711-X
	 9  5  1  0  2  0  7  1  1  X
	10  9  8  7  6  5  4  3  2
	90 45  8  0 12  0 28  3  2  = 188 ≡ 1 (mod 11)
	                              11 - 1 = 10 → X
Eri menetelmien sopiminen samaan numerosarjaan perustuu siihen, että saman numeron painotuksesta eri laskentatavoissa saatavat tulot – kuten kertoimetkin – ovat toistensa vastalukuja modulo 11 -järjestelmässä. Kerroin 123:lla on myös kaksi laskentatapaa, joiden suhde toisiinsa on hyvin samanlainen kuin tässä.

ISSN-numero

ISSN-numeron tarkistusohjelma

ISSN = International Standard Serial Number. Tällainen numero löytyy – ei aina kovin helposti – monista lehdistä ja muista julkaisusarjoista, joiden tunnisteina niitä käyttävät mm. kirjastot. ISSN-numero on yleensä sama kaikilla saman lehden numeroilla. Numero muodostuu kahdesta neljän merkin ryhmästä, jotka on erotettu väliviivalla. Viimeinen merkki on tarkistusmerkki, ja se voi olla numero tai X-kirjain. Muut merkit ovat numeroita. Toisin kuin ISBN- tai ISBN-13 -järjestelmässä, numeroilla ei ole erityisiä merkityksiä.

Tarkistusmerkin laskentamenetelmä on muuten sama kuin ISBN-numeroilla, mutta koska numerosarja on lyhyempi, alusta jätetään kaksi kerrointa pois, eli kertoimet ovat vasemmalta oikealle 3..9 tai 8..2. Molempia ISBN-numeroissa käytettäviä laskentatapoja voidaan siis soveltaa.

Esimerkki 1: 0888-8507 (PC Magazine)

	0  8  8  8  8  5  0  7
	3  4  5  6  7  8  9
	0 32 40 48 56 40  0  = 216 ≡ 7 (mod 11)
Esimerkki 2: 0357-4121 (Prosessori)
	0  3  5  7  4  1  2  1
	8  7  6  5  4  3  2
	0 21 30 35 16  3  4  = 109 ≡ 10 (mod 11)
	                       11 - 10 = 1
Suomalaisissa lehdissä on usein myös Jakelukoodi. Joissakin julkaisuissa on ISSN-numeron lisäksi ISBN- tai ISBN-13 -numero. Sähköisten julkaisujen yhteydessä voi esiintyä nimitys e-ISSN, mutta sen muoto ei näytä poikkeavan tavanomaisesta.

ISSN-numeroiden jakamisesta

ISSN-numeron pitäisi siis olla pelkkä "tyhmä" tunniste, jonka osilla ei ole itsenäistä merkitystä. Eri maille jaetaan kuitenkin ISSN-numeroiden alkuosia viiden tai (harvoin) kymmenen kappaleen lohkoina. Kussakin järjestelmään kuuluvassa maassa on kansallinen elin, joka jakaa numeroita julkaisuille, ja kukin maa on saanut käyttöönsä yhden tai useampia numerolohkoja. Eräitä muitakin kansainvälisiä tunnisteita jaetaan samalla periaatteella. On kuitenkin syytä varoa liian pitkälle menevien johtopäätösten tekemistä "tyhmien" tunnisteiden perusteella.

Moottoriajoneuvon sarjanumero

Moottoriajoneuvon sarjanumero (Vehicle Identification Number, VIN) on kansainvälisesti määritelty standardissa ISO 3779. Tämän 17 kirjaimesta ja numerosta muodostuvan merkkijonon voi löytää esim. rekisteriotteesta, ja tietysti se on merkitty myös itse ajoneuvoon moneen paikkaan, joista yksi on usein kojelauta siten, että numero on luettavissa ulkopuolelta tuulilasin läpi (edestä katsottaessa tuulilasin oikeassa alanurkassa eli yleensä ohjaajan puolella). Yhdysvalloissa ja Kanadassa aina, ja muualla mahdollisesti, sarjanumerossa on tarkistusmerkki positiossa 9. Laskenta on kirjainten käsittelyä lukuun ottamatta kuin yhdistelmä ISBN-numeron tarkisteen eri laskentatavoista:
  1. Sarjanumeroon sisältyvät kirjaimet korvataan numeroilla taulukon mukaisesti. Kirjaimia I, O ja Q ei käytetä; numerointiin on jätetty aukot vastaaviin kohtiin.
    A 1B 2C 3D 4E 5F 6G 7 H 8 
    J 1K 2L 3M 4N 5 P 7  R 9
     S 2T 3U 4V 5W 6X 7 Y 8Z 9
  2. Kutakin tarkistettavaa numeroa tai kirjaimen numeroarvoa painotetaan position mukaan; positiolle 9 ei ole kerrointa, koska siinä on tarkistusmerkki (nollaa voi tarvittaessa käyttää kertoimena):
    Positio12345678 1011121314151617
    Kerroin876543210 98765432
  3. Tulot lasketaan yhteen ja summa jaetaan 11:llä. Jakojäännös on tarkistusmerkki. Jos jakojäännös on 10, tarkistusmerkki on X.
Esimerkki: 1HGCB7569MA202978
                                                      Kirjaimet
1  H  G  C  B  7  5  6  9  M  A  2  0  2  9  7  8     korvattu
   8  7  3  2              4  1                     ← numeroilla
8  7  6  5  4  3  2 10     9  8  7  6  5  4  3  2
8 56 42 15  8 21 10 60    36  8 14  0 10 36 21 16 = 361 ≡ 9 (mod 11)
Sarjanumero kertoo ainakin valmistusmaan, merkin, mallin ja yksilönumeron, Pohjois-Amerikassa sarjanumerot ovat tarkemmin määriteltyjä kuin kansainvälisessä standardissa, mutta yhteensopivia standardin kanssa. Ne osoittavat myös tehtaan ja valmistusvuoden (yksilön todellinen tai mallin ensimmäinen valmistusvuosi; sama tunnus toistuu 30 vuoden välein). Mallitiedot ovat valmistajakohtaisia. Nykyinen järjestelmä tuli käyttöön 1981; sitä vanhemmat sarjanumerot ovat valmistajakohtaisia.

Painokertoimien summa 89 ≡ 1 (mod 11), josta seuraa että numerosarja jossa on 17 ykköstä läpäisee tarkistuksen, joten se sopii ensimmäiseksi testitapaukseksi, jos tehdään ohjelmaa sarjanumeroiden tarkistusta varten.

Em. esimerkkitapaus on havaittu Jyväskylässä Matarankadulla n. vuonna 1998. Internetistä löytyvä CarFax-palvelu osaa pelkän sarjanumeron perusteella kertoa autosta seuraavaa:

Year/Make/Model:1991 HONDA ACCORD EX/EXR
Body Style:Sedan 4 DR
Engine Type:2.2L L4 SOHC PFI 16V
Manufactured In:UNITED STATES
(4-ovinen Sedan, 2,2 litran 4-sylinterinen 16-venttiilinen rivimoottori jossa yksi yläpuolinen nokka-akseli ja polttoaineen suorasuihkutus. Jostakin syystä ei mainita tehdasta, joka sarjanumeron perusteella sijaitsee Ohiossa.)

Kemikaalin indeksi- ja EINECS-numero

Kemikaaleille on useita kansainvälisiä tunnistejärjestelmiä: Indeksinumero, EINECS-numero (ml. ELINCS- ja NLP-numero) ja CAS-numero. Näiden lisäksi on olemassa ainakin YK/UN-numero, RTECS-numero (Registry of Toxic Effects of Chemical Substances) ja ICSC-numero (International Chemical Safety Card) joissa ei näytä olevan tarkisteita. Huom! Tunnisteiden nimissä on sekavuutta; sen lisäksi että samalla tunnisteella voi olla useita nimiä, samaa nimeä käytetään joskus eri tunnisteista. Esimerkiksi Indeksinumero tunnetaan myös nimellä EU-numero, mutta jotkut käyttävät tätä nimeä EINECS/ELINCS/NLP-numeroista, joten sekaannuksia voi tapahtua helposti. Jos et löydä etsimääsi tietyllä nimellä, katso muista kemikaalien tunnisteita käsittelevistä kappaleista.

Koska kemikaalit luokitellaan eri tunnistejärjestelmissä eri perusteilla, on tavallista että erilaisissa luetteloissa ja kuvauksissa annetaan jokaisesta aineesta vähintään kolmen eri järjestelmän mukaiset koodit; joskus vain niiden yhdistelmä on täysin yksilöivä.

Kemikaalin indeksinumero

Kemikaalin indeksinumero on muotoa AAA-BBB-CC-T, jossa AAA on joko tärkeimmän alkuaineen järjestysnumero alkuaineiden jaksollisessa järjestelmässä (001:stä teoriassa vähän yli sataan, mutta käytännössä transuraaneihin perustuvat kemikaalit lienevät harvinaisia) tai orgaanisen aineen ryhmänumero (AAA >= 601), BBB on juokseva numero, CC osoittaa aineen olomuodon ja T on tarkiste, joka lasketaan soveltamalla ISBN-numeron tarkistusmenetelmää. Esimerkkejä: Ammoniakki 007-001-00-5 (007 = typpi) ja suolahappo 017-002-01-X (017 = kloori):
	 0  0  7 - 0  0  1 - 0  0 - 5
	 1  2  3   4  5  6   7  8
	 0  0 21   0  0  6   0  0   = 27 ≡ 5 (mod 11)

	 0  1  7 - 0  0  2 - 0  1 - X
	10  9  8   7  6  5   4  3
	 0  9 56   0  0 10   0  3   = 78 ≡ 1 (mod 11)
	                              11 - 1 = 10 → X
(ammoniakki NH3 + suolahappo HCl → ammoniumkloridi NH4Cl = salmiakki)

Tutkittujen esimerkkien perusteella näyttää siltä, että aineen olomuodolla ei niinkään tarkoiteta kiinteää, nestemäistä tai kaasua, vaan paremminkin onko aine puhdasta, vai onko kyseessä esim. kemikaalin vesiliuos.

Kemikaalin EINECS-numero

Tässä tarkastellaan kolmea tunnistejärjestelmää, jotka ovat läheistä sukua toisilleen:
  • EINECS = European Inventory of Existing Commercial Chemical Substances = Euroopassa kaupallisessa käytössä 01.01.1971 .. 18.09.1981 olleiden kemikaalien luettelo (100 196 kemikaalia).
  • ELINCS = European List of Notified Chemical Substances = Euroopassa 19.09.1981 alkaen ilmoitettujen kemikaalien luettelo.
  • NLP = No longer polymers = Ei enää polymeereja. Nämä ovat aineita, jotka on 31.10.1993 saakka luokiteltu polymeereiksi, ja joita ei sen vuoksi tarvinnut merkitä luetteloon, mutta joiden luokitusta on myöhemmin muutettu, jolloin niille perustettiin oma luettelo.
Tunnisteen muoto on luettelosta riippumatta sama: AAA-BBB-T, jossa T on tarkiste (väliviivoja ei aina käytetä). Luettelot erottuvat toisistaan käyttämällä eri osia samasta koodiavaruudesta: EINECS-numerossa AAA on 200..310, ELINCS-numerossa AAA >= 400 ja NLP-numerossa AAA >= 500. Tarkiste lasketaan soveltamalla ISBN-numeron tarkistusmenetelmää lähes samalla tavalla kuin indeksinumerossa. Esimerkkejä: Ammoniakki 231-635-3 ja suolahappo 231-595-7:
	 2  3  1 - 6  3  5 - 3
	 1  2  3   4  5  6
	 2  6  3  24 15 30   = 80 ≡ 3 (mod 11)

	 2  3  1 - 5  9  5 - 7
	10  9  8   7  6  5
	20 27  8  35 54 25   = 169 ≡ 4 (mod 11)
	                       11 - 4 = 7
Tunnisteet muodostetaan siten, että tarkiste on aina välillä 0..9, eli indeksinumerosta poiketen arvoa X ei koskaan tarvita. Huom. 1! Tieto tarkisteen laskennasta ei perustu mihinkään julkaistuun dokumenttiin, vaan yli tuhannen aidon EINECS-numeron ja lähes 700 aidon NLP-numeron analysointiin. ELINCS-numeroita on löydetty tutkittaviksi vain muutama. (Myöhemmin on julkaistu dokumentti, joka vahvistaa tässä annetut tiedot.) Huom. 2! Useat lähteet antavat naledi-nimiselle aineelle (englanniksi naled) väärän EINECS-numeron 206-098-6, mutta myös oikea numero 206-098-3 löytyy monesta paikasta. Huom. 3! Virallisessakin luettelossa tarkisteena voi olla pieni l-kirjain jos oikea tarkiste on ykkönen. En oikein osaa kuvitella tällaisen virheen syntyvän muuten kuin OCR-ohjelmassa.

EINECS-numerosta käytetään myös (luultavasti vanhentuneita) nimiä EEC-numero, ETY-numero ja EY-numero. Wikipedian mukaan myös EINECS, ELINCS ja NLP ovat vanhentuneita, ja niiden sijasta pitäisi käyttää nimeä EC-numero tai EC# (European Commission). Tätä EC-numeroa ei pidä sekoittaa toiseen samannimiseen järjestelmään, jonka on määritellyt kansainvälinen elin nimeltä Enzyme Commission (EC), ja jota käytetään entsyymien (katalyyttien) yksilöintiin. Näiden numeroiden muoto on erilainen eikä niissä ole tarkistetta. Sekaannusten vähentämiseksi aion ainakin toistaiseksi pitää otsikoinnin nykyisessä muodossaan.


Y-tunnus muunnelmineen

Y-tunnuksen muunnelmia ovat ALV-numero, EORI-numero ja OVT-tunnus.

Y-tunnus

Y-tunnuksen tarkistusohjelma

Yritys- ja yhteisötunnus. Y-tunnuksella on 01.04.2001 alkaen korvattu Kaupparekisterinumero, Säätiörekisterinumero ja LY-tunnus (Liike- ja yhteisötunnus), jonka kanssa Y-tunnus on rakenteeltaan identtinen (laki 244/2001, asetus 288/2001). Y-tunnuksen antaa joko Verohallitus (VH) tai Patentti- ja rekisterihallitus (PRH), kun yritys tai yhteisö merkitään Yritys- ja yhteisötietojärjestelmään (YTJ). Vanhat LY-tunnukset kelpaavat sellaisenaan Y-tunnuksiksi. Y-tunnus on englanniksi Business ID, kun taas Yritys- ja yhteisötunnus on Business Identity Code. Tunnuksen voi usein löytää esim. laskusta tai kirjelomakkeesta. Tarkisteen laskenta on määritelty em. asetuksessa.

Tunnus on muotoa NNNNNNN-T.

  1. Tunnuksen numeroita (7 kpl, tarvittaessa lisätään alkuun nolla; numeroita oli aikaisemmin kuusi, ja tätä vanhaa muotoa voi hyvin harvoin nähdä vieläkin) painotetaan vasemmalta lähtien kertoimilla 7, 9, 10, 5, 8, 4 ja 2.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 11:llä.
  4. Jos jakojäännös on 0, tarkistusnumero on 0.
    Ei anneta tunnuksia, jotka tuottaisivat jakojäännöksen 1.
    Jos jakojäännös on 2..10, tarkistusnumero on 11 miinus jakojäännös.
Esimerkki 1: 1572860-0
	1  5  7  2  8  6  0  - 0
	7  9 10  5  8  4  2
	7 45 70 10 64 24  0  = 220 ≡ 0 (mod 11) → 0
Esimerkki 2: 0737546-2
	0  7  3  7  5  4  6  - 2
	7  9 10  5  8  4  2
	0 63 30 35 40 16 12  = 196 ≡ 9 (mod 11) → 2
Kertoimista on lisätietoja standardiin ISO 7064 sisältyvän menetelmän Mod 11-2 kuvauksessa.

Kuten Y-tunnus, myös rikosrekisterinumero muodostuu seitsemästä merkistä, väliviivasta ja tarkistusnumerosta, mutta muuten sisällöstä tai tarkisteen laskentatavasta ei ole mitään tietoa. Esimerkkejä kaivataan.

ALV-numero

Suomalaisen ALV-numeron tarkistusohjelma

ALV-numeroa tarvitaan Euroopan Unionin jäsenmaiden välisessä kaupassa. Y-tunnuksesta saadaan ALV-numero lisäämällä alkuun kirjaimet FI ja jättämällä väliviiva pois. Esim. 0174592-8 → FI01745928. Suomalaiselle ALV-numerolle voidaan siis tehdä sama tarkistus kuin Y-tunnukselle. ALV-numerosta voidaan myös muodostaa Y-tunnus.

EU:n sääntöjen mukaan ALV-numerossa on kaksikirjaiminen maatunnus ja enintään kaksitoista muuta merkkiä, jotka voivat olla numeroita, kirjaimia tai joissakin tapauksissa "+" tai "*". Maatunnus on useimmiten standardin ISO 3166-1 mukainen, mutta ainakin Kreikan kohdalla käytetään poikkeavaa tunnusta EL (standardissa GR). Tarkistusmenetelmä on maakohtainen; esim. useimmissa englantilaisissa VAT-numeroissa on kaksinumeroinen tarkiste (modulo 97). Valitettavasti laajin löytämäni yhteenveto eri maiden menetelmistä on saksankielinen, joten en osaa lukea sitä kovin hyvin (osoitteen tai dokumentin saa minulta pyytämällä; dokumentista on myös englanninkielinen käännös, mutta sen tekijä on ilmeisesti puolalainen, eikä tulos ole sen helpommin luettava kuin alkuperäinen). Lisäksi aitojen esimerkkien puute tekee useimpien kohtien tarkistamisen mahdottomaksi, eikä dokumentissa ole tietoja kaikista nykyisistä jäsenmaista. Kaikissa dokumentoiduissa tapauksissa jokin tarkistus on kuitenkin käytössä. Hiukan ihmettelen sitä, ettei tarkistukseen ole kehitetty IBAN:in kaltaista yhtenäistä menettelyä. Euroopan komissio jopa nimenimaan kieltäytyy kertomasta tarkistusmenetelmiä. EU:lla on kuitenkin ilmainen nettipalvelu, josta voi tarkistaa mille taholle jokin numero on rekisteröity, jolloin sen muotokin tulee tarkistetuksi.

ALV = arvonlisävero = Value Added Tax = VAT. ALV-numero = ALV-tunniste = ALV-tunnus = VAT-numero = VAT-tunnus.

Osoitteesta http://www.braemoor.co.uk/software/vat.shtml löytyy JavaScript-ohjelmapaketti, jolla voidaan tarkistaa useiden maiden VAT-numeroita.

Niille lukuisille henkilöille, jotka etsivät tietoja yhdysvaltalaisista VAT-numeroista: VAT on eurooppalainen (ranskalainen) keksintö. Yhdysvalloissa vain Michiganin osavaltiolla on ollut arvonlisäveroa muistuttava käytäntö, ja siitäkin luovuttiin vuoden 2008 lopussa. Ei siis ole luultavaa että VAT-numeroitakaan olisi maanlaajuisesti käytössä, mutta jotkin yhdysvaltalaiset yritykset saattavat ilmoittaa eurooppalaisen VAT-numeron, jos niillä on sellainen – tällöin kyseessä on tavallisesti yritys, jolla on asiakkaita EU:n alueella. ALV:n sijasta Yhdysvalloissa peritään myyntiveroa (sales tax), joka on osavaltiokohtainen (ei kaikissa osavaltioissa). Tätä varten yrityksillä on Sales Tax Number (jos on). Liittovaltion tasolla yrityksillä ja yhteisöillä on verottajan (IRS, Internal Revenue Service) antama tunnus, josta käytetään mm. seuraavia nimiä:

  • Federal Taxpayer Identification Number
  • Federal Tax Identification Number (FTIN)
  • Federal Identification Number (FIN)
  • Taxpayer Identification Number (TIN)
  • Employer Identification Number (EIN)
  • Federal Employer Identification Number (FEIN)
Tunnuksen muoto on tavallisesti 99-9999999.

EORI-numero

Suomalaisen EORI-numeron tarkistusohjelma

EORI-numero (Economic Operator Registration and Identification number, taloudellisen toimijan rekisteröinti- ja tunnistenumero) on EU:n määrittelemä tunniste, jota käytetään erinäisissä Tullille annettavissa ilmoituksissa. Suomalaiset toimijat saavat EORI-numeron Suomen tullilta, ja käyttävät samaa numeroa kaikissa EU-maissa. Tunnistetta on voitu käyttää 01.07.2009 alkaen, ja 01.07.2010 alkaen sen käyttö on pakollista.

Suomalainen EORI-numero muodostetaan tavallisesti lisäämällä Y-tunnuksen eteen Suomen ISO 3166-1 -maatunnus FI. Esimerkkejä:

	0763403-0 → FI0763403-0
	2229125-9 → FI2229125-9
EORI-numero on siis lähes identtinen ALV-numeron kanssa, mutta säilyttää Y-tunnuksen väliviivan. Tarkiste tietysti lasketaan kuten Y-tunnuksessa. – Vaikka tunnisteen muodostaminen näyttää niin yksinkertaiselta, että sen voisi tehdä itsekin, sitä voi käyttää vasta kun Tulli on sen rekisteröinyt.

Ylläoleva perustuu Suomen tullin julkaisemiin tietoihin. EU:n julkaisemien dokumenttien mukaan EORI-numerossa on kaksikirjaiminen maatunnus ja maakohtaisesti yksilöivä enintään 15-merkkinen alfanumeerinen tunnus. Tässä on ristiriita, koska Y-tunnuksen väliviiva ei ole alfanumeerinen merkki. Kuitenkin EU:n ylläpitämä nettipalvelu, josta EORI-numeroita voi tarkistaa, hyväksyy suomalaiset EORI:t väliviivan kanssa, mutta ei ilman sitä. Ylläolevat esimerkit läpäisevät tarkistuksen (maaliskuussa 2012).

OVT-tunnus

Suomalaisen OVT-tunnuksen tarkistusohjelma

Organisaatioiden Välisessä Tiedonsiirrossa käytettävä OVT-tunnus, englanniksi Party Identification (sananmukaisesti osapuolitunniste), voidaan muodostaa Y-tunnuksesta. OVT-tunnuksessa on 12..17 numeroa ja sen tavanomainen muoto on 0037AAAAAAAABBBBB jossa:

  • 0037 on ISO-standardin 6523 mukainen Suomen verohallinnon koodi (International Code Designator, ICD)
  • AAAAAAAA on Y-tunnus tarkisteineen mutta ilman väliviivaa
  • BBBBB on organisaation osan tunnus, esim. kustannuspaikka; ei pakollinen, numeerinen, enintään viisi numeroa, tasataan kentän vasempaan reunaan.
Suoraveloituksessa laskuttaja voi käyttää pankin antamaa 9991-alkuista OVT-tunnusta.

Nykyisin OVT-tunnusten tärkein käyttöalue on verkkolaskutus, jossa tunnusta käytetään osoitteena. Aikaisemmin niitä käytettiin paljon EDI-sanomien osoitteina (Electronic Data Interchange). OVT on EDI:n suomenkielinen vastine. Pitemmässä muodossa EDIFACT (Electronic Data Interchange for Administration, Commerce and Transport). OVT-tunnus on määritelty Suomen standardisoimisliiton standardissa SFS 5748, jonka kehittäjäksi on merkitty Suomen tiedonsiirtoyhdistys / Tietotekniikan kehittämiskeskus. Lähteet: Mm. em. standardi ja julkisen hallinnon suositukset (JHS) 111 ja 141.

Minulle on kerrottu, että verkkolaskutuksessa organisaation osan tunnuksessa käytetään yleisesti kirjaimia. Sen varauksen joudun esittämään, että standardista voi olla olemassa uudempi versio, josta minulla ei ole tietoa (jos näin on, otan mielihyvin vastaan luotettavan todisteen, ja muutan sivustoani sen mukaisesti), mutta muuten pidän kirjainten käyttöä standardinvastaisena, ja uskon että niiden käyttöön on ainakin kolme syytä:

  • Vaikka OVT-tunnuksen muoto on standardoitu, mikään taho ei jaa tunnuksia keskitetysti, vaan organisaatiot muodostavat tunnuksensa itse. Kukaan ei siis valvo, että standardia noudatetaan.
  • Standardi ei ole vapaasti saatavilla, vaan siitä pitäisi maksaa (minulla on yliopiston kirjaston 07.12.1992 päivätystä vapaakappaleesta omaan käyttöön otettu valokopio). Hinta ei ole niin suuri, että se minkään firman tms. rahoissa tuntuisi, mutta pienikin summa luo helposti byrokraattisen esteen, jonka vuoksi standardi ei päädy sitä tarvitsevien käyttöön.
  • Verkkolaskufoorumin ohjausryhmä levittää väärää tietoa standardin sisällöstä.
Standardit ovat suosituksia, joten niiden noudattamiseen ei ole juridista pakkoa, mutta ketään ei myöskään voida velvoittaa hyväksymään tunnisteita, joiden muoto ei vastaa ao. standardia.

Joskus OVT-tunnuksia näkee vaihtelevin tavoin välilyönneillä ryhmiteltyinä, oletettavasti luettavuuden parantamiseksi. Standardi ei ryhmittelyä eksplisiittisesti salli eikä kiellä, muttei sitä myöskään missään kohdassa käytä. Minusta tämä voidaan tulkita implisiittiseksi kielloksi – tällaisia asioita ei standardeissa yleensäkään ole tapana mainita, ellei ryhmittelyä erikseen sallita; jos sallitaan, siitä myös annetaan ohjeet.

(Koska OVT-tunnuksessa ei Y-tunnuksen tarkisteen lisäksi ole erillistä tarkistetta, kuvaus tässä laajuudessa ei oikeastaan kuulu tämän dokumentin aihepiiriin, mutta kuvausta on täydennetty, koska tilastointi osoittaa että hakukoneiden kautta sitä etsitään täältä aika usein.)


Moduli 11

Tässä kappaleessa kuvataan useita menetelmiä, joissa käytetään eri painokertoimia, mutta jakaja on kaikissa sama, ja jakojäännöksen käsittelyssä on selvää yhtäläisyyttä. Kaikkien menetelmien virheenpaljastuskyky on myös samaa hyvää tasoa, mutta kahta tarkistetta käyttävä norjalainen henkilötunnus on sovelluksena poikkeuksellisen toimintavarma – tavalliset virheet havaitaan aina, ja muut hyvin suurella todennäköisyydellä, jopa kaikki kahden numeron virheet havaitaan yhtä erikoistapausta lukuun ottamatta.

Norjalainen henkilötunnus

Seuraavat tiedot perustuvat enimmäkseen norjankieliseen Wikipediaan. Varoitus! En osaa norjaa, enkä ole löytänyt yhtään aitoa norjalaista henkilötunnsta johon näitä tietoja voisi verrata. Virheet ovat mahdollisia.

1964 käyttöön otettu norjalainen henkilötunnus fųdselsnummer (usein personnummer, vaikka tämä nimi tarkkaan ottaen tarkoittaa vain tunnuksen viittä viimeistä numeroa) muodostuu yhdestätoista numerosta PPKKVVNNNTT seuraavasti:

  • PPKKVV: Syntymäaika, päivä, kuukausi ja vuosiluvun kaksi viimeistä numeroa
  • NNN: Yksilönumero, miehillä pariton, naisilla parillinen
  • TT: Kaksi tarkistetta
1. tarkisteen laskenta: Tunnuksen yhdeksää ensimmäistä numeroa painotetaan vasemmalta oikealle kertoimilla 3, 7, 6, 1, 8, 9, 4, 5 ja 2. Tulot lasketaan yhteen. Tarkiste on numero joka summaan on lisättävä, jotta tulos olisi tasan jaollinen 11:llä.

2. tarkisteen laskenta: Tunnuksen kymmentä ensimmäistä numeroa painotetaan vasemmalta oikealle kertoimilla 5, 4, 3, 2, 7, 6, 5, 4, 3 ja 2. Tulot lasketaan yhteen. Tarkiste on numero joka summaan on lisättävä, jotta tulos olisi tasan jaollinen 11:llä. Ensimmäinen tarkiste otetaan siis mukaan toisen tarkisteen laskentaan.

Sääntöjen mukaan lisättävä arvo voisi olla 10, mutta tällaisia tunnuksia ei anneta, joten kumpikin tarkiste on aina yksinumeroinen. Hihasta ravistettu esimerkki: 09128517526

	0  9  1  2  8  5  1  7  5  2  6
	3  7  6  1  8  9  4  5  2
	0 63  6  2 64 45  4 35 10  = 229 ≡ 9 (mod 11) → 2

	0  9  1  2  8  5  1  7  5  2  6
	5  4  3  2  7  6  5  4  3  2
	0 36  3  4 56 30  5 28 15  4  = 181 ≡ 5 (mod 11) → 6
Syntymävuoden kaksi ensimmäistä numeroa ovat pääteltävissä kahden viimeisen numeron ja yksilönumeron yhdistelmästä:
  • Vanhat säännöt, vuoteen 1999 saakka:
    • 000..499: Henkilö on syntynyt 1900-luvulla
    • 500..749: Henkilö on syntynyt 1800-luvulla
    • 750..999: Erikoistapauksia, esim. ulkomailla syntyneet
  • Uudet säännöt, vuodesta 2000 alkaen (tiedot maaliskuulta 2012):
    • 000..499: Henkilö on syntynyt 1900-luvulla
    • 500..749: Henkilö on syntynyt välillä 1854..1899
    • 500..999: Henkilö on syntynyt välillä 2000..2039
    • 900..999: Henkilö on syntynyt välillä 1940..1999 (erikoistapauksia, esim. ulkomailla syntyneet)
Säännöt eivät ole aivan aukottomat, ja muutenkin on ilmeistä että järjestelmä vaatii muutoksia viimeistään vuonna 2040. Norjassa käytetään myös tilapäisiä henkilötunnuksia nimeltä D-numero (D-nummer), jotka muistuttavat tavallisia tunnuksia, mutta ensimmäiseen numeroon on lisätty 4, eli jos esim. syntymäpäivä on 16.04.1981, päivä esitetään muodossa 560481. Lisäksi on käytössä H-nummer, joka sekin muistuttaa tavallista henkilötunnusta, mutta kolmanteen numeroon lisätään 4; tällainen numero voidaan antaa tilapäisesti esim. sairaalassa henkilölle, jolla ei ole muuta tunnusta tai jonka tunnusta ei pystytä selvittämään.

Hamming-koodi ja 10-järjestelmä

Richard Hamming keksi 1949 Hamming-koodin, jota edelleen käytetään tallennettujen tai siirrettävien binääristen tietojen tarkistuksessa. Menetelmä pystyy korjaamaan kaikki yhden bitin virheet sekä havaitsee kaikki kahden bitin virheet ja suurimman osan isommista virheistä. Periaatteessa menetelmä soveltuu myös muille kantaluvuille kuin 2, mutta tällöin kahden numeron virhe voidaan tulkita korjattavissa olevaksi yhden numeron virheeksi, minkä lisäksi tarkisteita tarvitaan vähintään kaksi. Pelkkään virheiden havaitsemiseen esim. Moduli 97-10 on yksinkertaisempi, joskin myös hiukan heikompi. Yksi dokumentti vakuuttaa kuitenkin ettei em. virhetulkintaa tapahdu, jos kantaluvuksi valitaan 11, tarkisteita on kaksi ja tarkistettavia numeroita on enintään yhdeksän. Toinen vahvistaa asian, mutta toteaa että vaikka edelläkuvattu norjalainen henkilötunnus vastaa tuntomerkkejä, kahden numeron virheen tunnistaminen ei silti aina onnistu, koska painokertoimet on valittu huonosti. Kappaleessa Verhoeffin menetelmä mainittu "The Laws of Cryptography with Java Code" kuvaa miten menetelmää käytetään oikein 10-järjestelmän numeroille.

Islantilainen henkilötunnus

Islantilainen henkilötunnus kennitala on muotoa PPKKVV-NNTS, jossa
  • PPKKVV: Syntymäaika, päivä, kuukausi ja vuosiluvun kaksi viimeistä numeroa
  • NN: Satunnainen yksilönumero
  • T: Tarkiste
  • S: Vuosiluvun toinen numero
Tarkisteen laskenta: Tunnuksen kahdeksaa ensimmäistä numeroa painotetaan oikealta alkaen numeroilla 2, 3, 4, 5, 6, 7, 2 ja 3. Tulot lasketaan yhteen. Tarkiste on numero joka summaan on lisättävä jotta tulos olisi tasan jaollinen 11:llä. Ei anneta tunnuksia, joissa lisättävä olisi 10. Esimerkki: Syntymäpäivä 19.05.1975, yksilönumero 46 → 190575-4629:
	1  9  0  5  7  5  -  4  6  2  9
	3  2  7  6  5  4     3  2
	3 18  0 30 35 20    12 12  = 130 ≡ 9 (mod 11) → 2
Tunnus kirjoitetaan usein ilman väliviivaa. Huomaa että viimeinen numero ei ole tarkistuksessa mukana, mutta nykyisin se ei voi olla muu kuin 8, 9 tai 0. Tunnuksesta ei (luultavasti) voi päätellä henkilön sukupuolta. Lähde: Statistics Iceland.

Islannissa käytetään myös tunnuksia, jotka ovat muuten samanmuotoisia kuin henkilötunnukset, mutta näyttää siltä että ensimmäiseen numeroon on lisätty 4; nämä ovat luultavasti yritysten ja/tai yhteisöjen tunnuksia. Esimerkki: 590169-7579. Myös näiden tunnusten nimi on kennitala.

Latvialainen henkilötunnus

Huom! Tämä kappale ei tarkisteen laskennan osalta perustu mihinkään julkaistuun dokumenttiin, vaan yhdessä Internetistä löytyneessä keskusteluketjussa olevaan PHP-esimerkkiskriptiin ja Internetistä löytyneiden oletettavasti aitojen henkilötunnusten tutkimiseen. Keskustelu lienee latviankielinen, mutta skriptin kommentit ovat englanniksi.

Latvialainen henkilötunnus (personas kods) on muotoa PPKKVV-SNNNT, jossa:

  • PPKKVV on henkilön syntymäaika (päivä, kuukausi ja kaksi viimesitä numeroa vuosiluvusta).
  • S:n sanotaan osoittavan vuosisadan 0 = 19. 1 = 20. ja 2 = 21. mutta pidän mahdollisena – jopa todennäköisenä – että oikea tulkinta onkin 0 = 1800-luku, 1 = 1900-luku ja 2 = 2000-luku.
  • NNN on yksilönumero.
  • T on tarkiste.
Henkilön sukupuolta luultavasti ei voi päätellä henkilötunnuksesta. Tarkisteen laskenta em. skriptin mukaan:
  1. Annetaan apumuuttujalle alkuarvo 1.
  2. Tunnuksen kymmentä ensimmäistä numeroa painotetaan vasemmalta oikealle kertoimilla 1, 6, 3, 7, 9, 10, 5, 8, 4 ja 2.
  3. Kukin tulo vähennetään apumuuttujasta.
  4. Jaetaan tulos 11:llä. Jakojäännös on tarkiste.
Jakojäännös lasketaan skriptissä kaavalla apu - floor(apu / 11) × 11 jossa floor-funktio palauttaa suurimman kokonaisluvun, joka ei ole suurempi kuin funktion argumentti. Huomaa että funktion argumentti on tässä laskennassa aina negatiivinen luku; tällaisessa tapauksessa joidenkin ohjelmointikielten int-funktio palauttaa saman tuloksen kuin floor, toisten taas ei. Kaava antaa tuloksen, joka matemaatikoiden mielestä on oikea jakojäännös. Useiden ohjelmointikielten mod-funktio tai vastaava operaattori antaa saman tuloksen, mutta useissa muissa, mm. PHP:ssä, näin ei tapahdu jos jaettava on negatiivinen. Koska skriptissä ei ole mitenkään otettu huomioon sitä mahdollisuutta, että jakojäännös voisi olla 10, eikä sellaista tullut vastaan myöskään aitoja tunnuksia tutkittaessa, voidaan olettaa että yksilönumero valitaan siten, ettei tällaista tilannetta koskaan esiinny. Esimerkki (todennäköisesti aito): 290758-10403
	2  9  0  7  5  8  1  0  4  0  3
	1  6  3  7  9 10  5  8  4  2
	2 54  0 49 45 80  5  0 16  0  = 251

	1 - 251 = -250; -250 - floor(-250 / 11) × 11 = 3
Eo. kuvaus poikkeaa useimmista muista tarkistusmenetelmistä, koska siinä käsitellään negatiivisia lukuja. Samaan tulokseen päästään tutummalta vaikuttavalla ja lyhyemmällä tavalla seuraavasti:
  1. Tunnuksen kymmentä ensimmäistä numeroa painotetaan vasemmalta oikealle kertoimilla 1, 6, 3, 7, 9, 10, 5, 8, 4 ja 2.
  2. Lasketaan tulot yhteen ja lisätään 9.
  3. Jaetaan summa 11:llä.
  4. Vähennetään jakojäännös 10:stä. Erotus on tarkiste.
Esimerkki:
	2  9  0  7  5  8  1  0  4  0  3
	1  6  3  7  9 10  5  8  4  2
	2 54  0 49 45 80  5  0 16  0  = 251

	10 - (251 + 9) mod 11 = 3
Em. skriptin perusteella tässä laskentatavassa jakojäännös ei koskaan ole 0 jos tunnus on virheetön. Kertoimista on lisätietoja standardiin ISO 7064 sisältyvän menetelmän Mod 11-2 kuvauksessa.


Moduli 11-11

Virolainen ja liettualainen henkilötunnus

Virolainen henkilötunnus

Virolainen henkilötunnus isikukood (IK) on muotoa SVVKKPPNNNT jossa:
  • S: Numero osoittaa syntymävuoden kaksi ensimmäistä numeroa ja henkilön sukupuolen seuraavasti:
    • 1 tai 2: 1800-luku
    • 3 tai 4: 1900-luku
    • 5 tai 6: 2000-luku
    • Pariton numero: Mies
    • Parillinen numero: Nainen
  • VVKKPP: Syntymäaika; vuosi (kaksi viimeistä numeroa), kuukausi ja päivä
  • NNN: Yksilönumero
  • T: Tarkiste
Kaikki kentät ovat numeerisia. Tarkisteen laskenta:
  1. Tunnuksen numeroita painotetaan vasemmalta oikealle kertoimilla 1, 2, 3, 4, 5, 6, 7, 8, 9 ja 1.
  2. Tulot lasketaan yhteen. Summa jaetaan 11:llä.
  3. Jos jakojäännös on pienempi kuin 10, se on tarkiste; tällöin ohitetaan loput työvaiheet.
  4. Jos jakojäännös on 10, yritetään uudelleen kertoimilla 3, 4, 5, 6, 7, 8, 9, 1, 2 ja 3.
  5. Jos jakojäännös on pienempi kuin 10, se on tarkiste.
  6. Jos jakojäännös on 10, tarkiste on 0.
Esimerkki: 37107290014
	3  7  1  0  7  2  9  0  0  1  4
	1  2  3  4  5  6  7  8  9  1
	3 14  3    35 12 63        1  = 131 ≡ 10 (mod 11)
	                                → Uusi yritys

	3  7  1  0  7  2  9  0  0  1  4
	3  4  5  6  7  8  9  1  2  3
	9 28  5    49 16 81        3  = 191 ≡ 4 (mod 11)
Tiedot perustuvat vironkieliseen Wikipediaan, Internetin keskusteluryhmistä löytyneisiin ohjelmaesimerkkeihin ja vironkielisiin tietoihin sekä Internetistä löytyneiden tunnusten tutkimiseen. Varoitus! En osaa viroa, joten olen voinut ymmärtää jonkin kohdan väärin. Keskusteluryhmien tiedot ovat ristiriitaisia: Tavallisin ero edelläkuvattuun on maininta, jonka mukaan viimeisessä kohdassa pitäisi lukea: "Jos jakojäännös on 10, tunnus on virheellinen." Internetistä löytyneiden tunnusten joukossa on kuitenkin yksi (36506280030), joka sopii yhteen esittämäni kuvauksen kanssa, mutta on vaihtoehtoisen kuvauksen mukaan virheellinen. Toisaalta 50 tunnuksen joukossa on viisi, jotka esittämäni kuvauksen mukaan ovat virheellisiä, joukossa yksi jossa ensimmäinen numero on 4 kun sen luultavasti pitäisi olla 3 (olettaen että Jüri on miehen etunimi). Tunnukset ovat peräisin hyvin sekalaisista lähteistä, joten niissä voi todella olla virheitä.

Liettualainen henkilötunnus

Mm. englanninkielisen Wikipedian ja Perlin CPAN-kirjastosta löytyvän tarkistusohjelman mukaan liettualainen henkilötunnus (asmens kodas) on täysin identtinen virolaisen henkilötunnuksen kanssa, paitsi että ensimmäisessä positiossa numerot 7 ja 8 on jo varattu 2100-luvulla syntyville.


Moduli 11-0

Osuuspankin konttoritunnus

Osuuspankkien tilinumeroissa on lopussa samanlainen tarkiste kuin muillakin Suomessa toimivilla pankeilla, mutta sen lisäksi tilinumeron alussa olevan kuusinumeroisen konttoritunnuksen viimeinen numero on edeltävistä numeroista laskettu tarkiste. Laskenta (vrt. Moduli 11-5):
  1. Tarkistettavia numeroita painotetaan vasemmalta alkaen kertoimilla 2, 3, 9, 5 ja 7.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 11:llä.
  4. Jakojäännös määrää tarkisteen seuraavasti:
    • Jos jakojäännös on 0 tai 1, tarkiste on 0.
    • Jos jakojäännös on 2..10, tarkiste on 11 miinus jakojäännös.
Esimerkki (Keski-Suomen Osuuspankki):
	 5  2  9  0  5  0 - N N N N N N N T
	 2  3  9  5  7
	10  6 81  0 35  = 132 ≡ 0 (mod 11) → 0
Osuuspankkien tilinumerot tunnistaa siitä, että ensimmäinen numero on 5. Paikallisosuuspankeilla ensimmäinen numero kuitenkin on 4, kuten säästöpankeilla, eikä tätä tarkistusta käytetä. Muiden pankkien tilinumeroissa ei tarkistetta ole konttoritunnuksessa havaittu. Huom! Tämä kuvaus ei perustu mihinkään julkaistuun dokumenttiin, vaan yleisöltä tammikuussa 2002 saatuihin tietoihin ja aitojen tilinumeroiden tutkimiseen.


Moduli 11-5

Postin lähetystunnus

Tämä tarkistus on todettu toimivaksi kirjattujen ja pikakirjeiden 13-merkkisissä lähetystunnuksissa. Sama tarkistus voi olla käytössä myös muissa lähetyksissä, joiden lähetystunnukset ovat samanmuotoisia, sillä tarkistusmenetelmä sisältyy UPU:n standardiin S10 (Union postale universelle / Universal Postal Union / Maailman postiliitto). Sitä vastoin esim. tavallisten kotimaisten postipakettien 21-merkkisissä lähetystunnuksissa ei näytä olevan mitään tarkistetta. Tunnuksen osat ovat:
  1. Kaksi kirjainta, jotka osoittavat lähetyksen tyypin (Service Indicator Code (SIC): Suomessa esim. LX = pikakirje, PE = postiennakko, RR = kirjattu kirje, VV = vakuutettu lähetys; täydellistä luetteloa vaihtoehdoista ei ehkä ole lainkaan olemassa ja yksittäinen koodi voi tarkoittaa eri asioita eri maissa).
  2. Kahdeksan yksilöivää numeroa, ei pelkkiä nollia.
  3. Yksinumeroinen tarkiste (tai eräissä erikoistapauksissa X-kirjain, joka ei ole tarkiste).
  4. Kaksikirjaiminen ISO 3166-1 -maatunnus, Suomessa FI.
Tarkiste lasketaan vain yksilöivistä numeroista:
  1. Tarkistettavia numeroita painotetaan oikealta alkaen kertoimilla 7, 9, 5, 3, 2, 4, 6 ja 8.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 11:llä.
  4. Jakojäännös määrää tarkisteen seuraavasti:
    • Jos jakojäännös on 0, tarkiste on 5.
    • Jos jakojäännös on 1, tarkiste on 0.
    • Jos jakojäännös on 2..10, tarkiste on 11 miinus jakojäännös.
Vrt. Moduli 11-0, jossa kerrointen järjestys on toinen ja tasan menevä jako käsitellään eri tavalla, mutta moni asia on samoin kuin tässä.

Esimerkki 1 (kirjattu kirje): RR026224385FI

	RR 0  2  6  2  2  4  3  8  5 FI
	   8  6  4  2  3  5  9  7
	   0 12 24  4  6 20 27 56  = 149 ≡ 6 (mod 11) → 5
Esimerkki 2 (pikakirje): LX056327445FI
	LX 0  5  6  3  2  7  4  4  5 FI
	   8  6  4  2  3  5  9  7
	   0 30 24  6  6 35 36 28  = 165 ≡ 0 (mod 11) → 5
Huom! Tämä kuvaus ei perustu mihinkään Suomessa julkaistuun dokumenttiin, vaan Internetistä löytyneisiin ulkomaisiin tietoihin, yleisöltä syyskuussa 2002 saatuun vihjeeseen ja aitojen syksyllä 2002 postista saatujen osoitelappujen tutkimiseen.


Moduli 11-10

Merikuljetuskontin numero

ISO-standardin 6346 mukaan merikuljetuksissa käytettävien konttien numerot ovat muotoa AAAU 999999-T, jossa:
  • AAA on kontin omistajan tai pääasiallisen operaattorin kirjaintunnus (BIC-koodi; älä sekoita tätä rahaliikenteen BIC-koodiin)
  • U on vakio (literaali), joka osoittaa että kyseessä on rahtikontti (eräissä konttiliikenteeseen liittyvissä laitteissa tässä kohdassa voi olla J tai Z; muuten näiden laitteiden tunnisteet noudattavat samoja sääntöjä)
  • 999999 on yksilönumero
  • T on tarkiste, joka usein ympäröidään suorakaiteen muotoisella kehyksellä
Omistajien tunnukset merkitään Pariisissa sijaitsevan International Container Bureaun (Konttien ja intermodaalikuljetusten kansainvälinen yhteyselin = Bureau International des Containers et du Transport Intermodal = BIC) ylläpitämään rekisteriin. Yksilönumeron 1..4 ensimmäistä numeroa voivat kertoa kontista omistajan määrittelemiä tietoja (tyyppi, koko, materiaali), tai koko numerosarja voi olla pelkkä "tyhmä" tunniste. Tarkistus: Kirjaimet korvataan numeroilla seuraavan taulukon mukaisesti:
A 10B 12C 13D 14E 15F 16 G 17H 18I 19J 20K 21L 23 M 24
N 25O 26P 27Q 28R 29S 30 T 31U 32V 34W 35X 36Y 37 Z 38
Tarkistettavia numeroita ja kirjainten numeroarvoja painotetaan vasemmalta alkaen kertoimilla 1, 2, 4, 8 ... 512. Tulot lasketaan yhteen ja summa jaetaan 11:llä (jonka vuoksi 11 ja sen kerrannaiset on jätetty käyttämättä annettaessa kirjaimille numeroarvoja). Jakojäännös on tarkiste, paitsi jos jakojäännös on 10, jolloin tarkiste on 0 (standardi suosittelee, mutta ei määrää, ettei käytetä numeroita jotka antavat jakojäännöksen 10). Esimerkki CPSU 102470-9 (CPS = Canada Maritime Ltd, Hamilton, Bermuda):
	 C    P    S    U    1    0    2    4    7    0 - 9
	13   27   30   32
	 1    2    4    8   16   32   64  128  256  512
	13   54  120  256   16    0  128  512 1792    0   = 2891

	2891 mod 11 = 9
Algoritmin toteutuksesta tietokoneohjelmassa annetaan menetelmän Mod 37-2 yhteydessä vinkkejä, joita on kuitenkin vähän sovellettava.

Hampurilaisella Hapag-Lloyd -varustamolla on kaksi tunnusta, HLX (HLXU) ja HLC (HLCU), joista jälkimmäisen tarkistus on poikennut standardista siten, että kirjaimille käytetään seuraavia arvoja: H=4, L=0, C=2 ja U=9. Muuten tarkistus on sama kuin muillekin. Esimerkki HLCU 405447-0:

	 H    L    C    U    4    0    5    4    4    7 - 0
	 4    0    2    9
	 1    2    4    8   16   32   64  128  256  512
	 4    0    8   72   64    0  320  512 1024 3584   = 5588

	 5588 mod 11 = 0
Tästä käytännöstä on luovuttu, ja sen mukaisia kontteja on jäljellä vähän jos ollenkaan. Kerrotaan myös tapauksista, joissa omistajan tunnus on vaihdettu laskematta tarkistetta uudelleen. Valitettavasti minulla ei ole näistä luetteloa.

Esimerkit ovat aitoja. Aikaisemmin en ottanut tämän sovelluksen kuvausta mukaan dokumenttiin, koska luulin virheellisesti ettei aihe ketään kiinnostaisi. Hyvä näin, sillä ilman Timo Salmiselta huhtikuussa 2002 saatuja tietoja kuvaus olisi jäänyt puutteelliseksi. Monta yksityiskohtaa on täydennetty Internetistä löytyneiden tietojen perusteella, minkä lisäksi on tutkittu n. 50 aitoa konttinumeroa, joihin sisältyy myös em. poikkeuksia.

Kuljetuksen ja vakuuden viitenumerot

Kuljetuksen viitenumero

Kuljetuksen viitenumero (Movement Reference Number, MRN) on: "Tunnus, jonka Tullin järjestelmä antaa hyväksyessään tietyt tulli-ilmoitukset vastaanotetuiksi. Annettu MRN ilmoitetaan asiakkaalle hyväksymissanomassa. MRN-numero annetaan passitusilmoituksille, vienti-ilmoituksille ja tietyille saapumisen ja poistumisen ilmoituksille." Kuljetuksen viitenumero on 18-merkkinen ja muodostuu seuraavista osista:
  • Vuosiluvun kaksi viimeistä numeroa
  • Kaksikirjaiminen ISO 3166-1 -maakoodi
  • Yksilöivä tunniste, 13 aakkosnumeerista merkkiä (0..9, A..Z)
  • Tarkiste, yksi numero
Tarkiste lasketaan standardin ISO 6346 mukaisesti kuten Merikuljetuskontin numerossa. Esimerkki: 99IT9876AB88901209

99IT 9876 AB88 9012 0
  1931      1012← Kirjaimet korvattu numeroilla
1248 163264128 25651210242048 409681921638432768 65536
91876248 144256448768 25606144819216384 3686401638465536 0

Tulojen summa, jakojäännös ja tarkiste: 154031 mod 11 = 9 → 9

Vakuuden viitenumero

Vakuuden viitenumero eli Vakuuden viite eli Vakuusviite (Guarantee Reference Number, GRN) on tunniste, jonka Tulli antaa maahantuojan tms. asettamalle vakuustalletukselle, jolla Tulli varmistaa saatavansa. GRN-numero on 17- tai 24-merkkinen ja muodostuu seuraavista osista:
  • Vuosiluvun kaksi viimeistä numeroa
  • Kaksikirjaiminen ISO 3166-1 -maakoodi
  • Yksilöivä tunniste, 12 aakkosnumeerista merkkiä (0..9, A..Z)
  • Tarkiste, yksi numero
  • Toinen yksilöivä tunniste, jota useimmiten ei käytetä ja jota ei oteta huomioon tarkistetta laskettaessa, 7 aakkosnumeerista merkkiä
Tarkiste lasketaan samalla periaatteella kuin Kuljetuksen viitenumerossa. Esimerkki: 99IT1234AB7889662A001017 (alleviivaus osoittaa laskennassa huomioon otettavan osan tätä esimerkkiä varten, eikä kuulu GRN:n normaaliin esitystapaan)

99IT 1234 AB78 8966
  1931      1012← Kirjaimet korvattu numeroilla
1248 163264128 25651210242048 409681921638432768
91876248 1664192512 25606144716816384 327687372898304196608

Tulojen summa, jakojäännös ja tarkiste: 434799 mod 11 = 2 → 2

Lähde (MRN:n rakenne): Komission asetus (EY) N:o 502/1999, annettu 12. päivänä helmikuuta 1999, tietyistä yhteisön tullikoodeksista annetun neuvoston asetuksen (ETY) N:o 2913/92 soveltamista koskevista säännöksistä annetun asetuksen (ETY) N:o 2454/93 muuttamisesta, Euroopan yhteisöjen virallinen lehti 12.03.1999.

Lähde (GRN:n rakenne): Decision No 1/2001 of the EC-EFTA joint committee on common transit of 7 June 2001 amending the Convention of 20 May 1987 on a common transit procedure (2001/472/EC), Official Journal of the European Communities, 21.06.2001

Lähde (Tarkisteiden laskenta): Check character algorithm for the MRN and GRN, Brussels, 1 June 1999, Ref: DGXXI/0879/99 - Rev.1, DGXXI - TCP


Luhnin moduli 10

Tarkisteen lisäys- ja tarkistusohjelma

Luhnin moduli 10 on ehkä kaikkein yleisimmin käytetty tarkistusmenetelmä, eikä ihme, sillä se on yksinkertainen ja silti sen virheenpaljastuskyky on varsin hyvä (katso silti Havaittuja heikkouksia). Menetelmää käytetään mm. seuraavissa tapauksissa:
Sama tarkistus näyttää olevan esim. Sanoma Magazines Finlandin 9-numeroisessa asiakasnumerossa (numeron löytää lehden osoitetiedoista nimen yläpuolelta sekä tilausvahvistuksen ja laskun yläosasta). Tämän dokumentin ulkopuolelle on jätetty useita käyttötarkoituksia, joihin menetelmää sovelletaan Yhdysvalloissa ja muualla maailmassa. Englanninkielisessä tekstissä tästä menetelmästä käytetään usein nimiä Modulus 10 "Double-Add-Double", "Luhn formula" tai "Luhn-10 Algorithm". Joskus käytetään nimeä IBM Check, mutta samaa nimitystä käytetään myös Kerroin 137:stä. Menetelmä sisältyy ISO:n standardiin 7812-1, joka määrittelee luotto- ja muiden samankaltaisten muovikorttien numeroinnin, sen sijaan että se olisi ISO 7064:ssä, joka on erityisesti tarkistusmenetelmiä kuvaava standardi. Laskenta:

  1. Tarkisteen edessä olevia numeroita painotetaan oikealta alkaen kertoimilla 2, 1, 2, 1 jne..
  2. Jos tulo on kaksinumeroinen, sen numerot lasketaan yhteen (asia ilmaistaan joskus niin, että tulosta vähennetään 9, mikä onkin tietokoneella helpompaa; tällainen vähennyslasku ei kuitenkaan toimi jos menetelmästä muokataan versio jossa kantaluku on suurempi kuin 10 mutta välituloksia käsitellään 10-kantaisina).
  3. Tulot lasketaan yhteen.
  4. Tarkiste on numero, joka summaan on lisättävä jotta tulos olisi tasan jaollinen kymmenellä.
Sovellusten kuvauksissa on useita esimerkkejä. Tulojen summaus kuvataan eri lähteissä monilla muillakin tavoilla, mutta yleensä niiden yhtäpitävyys eo. kuvauksen kanssa on niin ilmeinen, ettei kaikkien vaihtoehtojen yksityiskohtia ole mielekästä käydä läpi. Yhteenlaskun vaihdantalain (A + B = B + A) muistaminen riittää sen tunnistamiseen, että kyseessä on sama menetelmä. Jotkin kuvaukset näyttävät kuitenkin selvästi erilaisilta:
  1. Määritellään tarkistetta edeltävä positio parittomaksi.
  2. Summataan parittomissa positioissa olevat numerot.
  3. Kerrotaan summa kahdella.
  4. Lisätään summaan parittomissa positioissa olevien 4:ä suurempien numeroiden lukumäärä.
  5. Lisätään summaan parillisissa positioissa olevat numerot (ei tarkistetta).
  6. Tarkiste on numero, joka summaan on lisättävä jotta tulos olisi tasan jaollinen kymmenellä.
Vielä yksi esitystapa on kohdassa MSI-viivakoodi. Kuvausten moninaisuus kertoo omalla tavallaan menetelmän laajasta käytöstä. Menetelmästä on myös muunnelma, jossa kirjaimia A..Z käsitellään 36-kantaisen lukujärjestelmän numeroina. National Metering Identifier Procedure (NMI) käyttää versiota, jossa tarkiste voitaisiin laskea mille tahansa ASCII-merkeille.

Tarkistusmenetelmän keksijäksi ei yleensä nimetä henkilöä, vaan yritys tai yhteisö jos mitään, mutta tämän menetelmän kehittäjä oli IBM:llä vv. 1941..1961 työskennellyt Hans Peter Luhn (1896..1964), joka tunnetaan automaattisen indeksoinnin pioneerina.

Pankkitilin numero

Varoitus! 31.10.2011 pankit lopettivat tämän kappaleen mukaisten suomalaisten tilinumeroiden vastaanottamisen tilisiirtojen yhteydessä, poikkeuksena yksityishenkilöiden antamat maksutehtävät, joissa pankki voi muuttaa tilinumeron IBAN-muotoon automaattisesti. Finanssialan keskusliitto ilmoitti 02.06.2014 että muunnospalvelu lakkaa lähikuukausina. Pyydä tilin omistajalta IBAN-tilinumero! Vuoden 2012 jälkeen suomalainen tilinumero ei saa esiintyä tilisiirtolomakkeessa. Suomalaisten tilinumeroiden tarkisteen laskentaa koskeva dokumentti on poistettu Finanssialan keskusliiton kotisivulta. Viimeinen suomalaisia tilinumeroita käyttävä sovellus – kotimainen suoraveloitus – poistui käytöstä 31.01.2014. Älä luota siihen, että tässä kuvattu tarkistus olisi käytössä sen jälkeen avattavien pankkitilien numeroissa!

Vuonna 1971 käyttöön otetun standardin mukaan pankkitilin numerossa on kuusi numeroa, väliviiva ja 2..8 numeroa. Tarkistusta varten numero on muokattava 14-numeroiseen konekieliseen muotoon lisäämällä tarvittaessa numerosarjaan nollia. Lisäyskohta ei ole kaikissa tapauksissa sama, vaan pankit jakautuvat kahteen ryhmään sen mukaan, mihin lisäys tehdään. Ryhmä tunnistetaan tilinumeron ensimmäisestä numerosta. Muut kuin allamainitut numerot eivät ole nykyisin käytössä, mutta 7- ja 9-alkuiset tilinumerot ovat kuuluneet ryhmään 1. Eräiden nykyisten Suomessa toimivien pankkien BBAN-tilinumerot alkavat 7:llä, mutta nämä pankit käyttävät vain IBAN-tilinumeroita. Lähde: Suomen pankkiyhdistys (vuoden 2007 alusta Finanssialan keskusliitto), Suomalaisten tilinumeroiden rakenne, toukokuu 2000.

Ryhmä 1: 1. numero on 1, 2, 3, 6 tai 8 → lisäys viivan jälkeen

	999999-99999
	999999-00099999
	       ===
Esimerkki:
	117835-53192
	117835-00053192
	       ===
Ryhmä 2: 1. numero on 4 tai 5 → lisäys viivaa seuraavan numeron jälkeen
	999999-99999
	999999-90009999
	        ===
Esimerkki:
	574044-25478
	574044-20005478
	        ===
Tästä eteenpäin tarkistus on normaali Luhnin moduli 10 ja se on sama kaikille pankeille.

Esimerkki: 159030-776 (Hassen matkat)

	1 5 9 0 3 0 - 0 0 0 0 0 7 7 6
	2 1 2 1 2 1   2 1 2 1 2 1 2
	2 5 9 0 6 0   0 0 0 0 0 7 5 = 34 → 6
Jotkin osat tilinumerossa voivat kertoa esim. konttorin jossa tili on avattu, tililajin tai asiakasryhmän (yhteisö / yksityinen), mutta nämä käytännöt vaihtelevat pankkiryhmittäin. Osuuspankeissa tilinumeron alkuosa sisältää erillisen tarkisteen. Danske Bankin (entisen Sampo Pankin) tilinumeroiden väliviivaa seuraavassa osassa on käytetty erillistä Postipankin ajalta periytynyttä tarkistetta, jonka laskentamenetelmä on Kerroin 137 (800-alkuiset numerot), mutta tästä on luovuttu uusissa tilinumeroissa 25.03.2008 alkaen. Suomalaisesta pankkitilin numerosta voidaan muodostaa kansainvälinen tilinumero IBAN, jolla myös on oma tarkisteensa.

Täydennys Finanssialan keskusliiton sivuilta löytyvään luetteloon Suomessa toimivista pankeista ja vastaavista tilinumeroiden alkuosista: Yleisöltä tammi-helmikuussa 2010 saatujen tietojen mukaan paikallisosuuspankkien tilinumeroiden (konttoritunnusten) alkuosa on aina välillä 4710..4788 ja Aktia Pankin tilinumeroissa alkuosa on jokin vaihtoehdoista 4050, 4055 tai 4970. Muut 4-alkuiset tilinumerot kuuluvat Säästöpankeille. Varoitus! Tiedot voivat muuttua! Valitettavasti säännot 5-alkuisten tilinumeroiden jakautumisesta eri pankkien ja ryhmien välillä ovat liian monimutkaiset esitettäväksi tässä.

Arvo-osuustilin numero ja X-tunnus

Mm. kaikki pörssissä noteerattavat arvopaperit on kirjattu arvo-osuusjärjestelmään, ja jokaisella tällaisia arvopapereita omistavalla täytyy olla arvo-osuustili. Arvo-osuustiln numero voi olla pitkä (enintään 19 merkkiä) tai lyhyt (10 merkkiä). Pitkän numeron muoto on RROOOOVVXXXXXXXXXNT jossa:
  • RR = Arvo-osuusrekisterin tunnus
  • OOOO = Osarekisteritunnus
  • VV = Vakio / vapaamuotoinen (Euroclear Finland Oy:llä 00 [aikaisempi Suomen Arvopaperikeskus Oy, APK])
  • XXXXXXXXXN = 10-numeroinen tilinumero, jossa N on tarkiste
  • T = Koko tilinumeron tarkiste
Numerosarja voi olla yhtenäinen tai se voidaan jakaa osiin välilyönneillä tai väliviivoilla ainakin näillä tavoilla:
  • 6 numeroa + 12 numeroa + 1 numero tai
  • 2 numeroa + 4 numeroa + 12 numeroa + 1 numero
Osan VVXXXXXXXXXN alussa olevat nollat voidaan jättää pois, erityisesti kun numerosarja esitetään osiin jaettuna. Tarkistusta varten tilinumero on tarvittaessa ensin täydennettävä 19-numeroiseksi lisäämällä poisjätetyt nollat. Tilinumero voi sisältää kirjaimia, jotka (yleisöltä joulukuussa 1999 saatujen tietojen mukaan) korvataan ennen tarkisteen laskentaa numeroilla siten, että A korvataan numeroparilla 10, B → 11, C → 12 ... Z → 35 (numeroarvot ovat samat kuin passeissa, vaikka niitä käytetään hieman eri tavalla). Käytännössä ainoa havaittu kirjain on A 10-numeroisen tilinumeron 2. positiossa eli 19-numeroisen tilinumeron 10. positiossa. Tarkistettava numerosarja siis pitenee korvauksessa ja yleisemmistä käytännöistä poiketen yksittäistä kirjainta korvaavan numeroparin numeroita käsitellään tästä eteenpäin erillisinä. Esimerkki korvauksesta (käytetään selvyyden vuoksi lyhyttä numerosarjaa): 327A9 → 327109

Tästä eteenpäin tarkistusmenettely on normaali Luhnin moduli 10. Esimerkkejä:

19-numeroinen: 04 4600 22A00003129 9, standardimuodossa: 044600 022A00003129 9

	0 4  4 6 0 0  0 2 2  A  0 0 0 0 3 1 2 9  9    A korvattu
	                    1 0                     ← numeroilla
	2 1  2 1 2 1  2 1 2 1 2 1 2 1 2 1 2 1 2
	0 4  8 6 0 0  0 2 4 1 0 0 0 0 0 3 2 2 9  = 41 → 9
10-numeroinen: 0000328112
	0 0 0 0 3 2 8 1 1 2
	2 1 2 1 2 1 2 1 2
	0 0 0 0 6 2 7 1 2 = 18 → 2
Huom! Tehtyjen havaintojen perusteella tämä tarkistus koskee 10-numeroisia tilinumeroita vain jos numerosarja ei sisällä kirjaimia (esim. Euroclear Finland Oy:n tilinumerot). Tiedossa ei ole, käytetäänkö kirjaimia sisältävissä 10-numeroisissa tilinumeroissa mitään tarkistusta.

Euroclear Finland Oy antaa X-tunnuksia (= keinotekoinen tunnus = keinotekoinen asiakastunnus) ulkomaisille osingonmaksajille ja suomalaisten osakkeiden omistajille, joilla ei ole suomalaista henkilö- tai y-tunnusta. Tunnus muodostuu X-kirjaimesta ja kahdeksasta numerosta. Olen löytänyt vain kaksi aitoa tunnusta, mutta molempiin sopii sama tarkistus kuin arvo-osuustilien numeroihin. Esimerkki X00476516:

	 X  0 0 4 7 6 5 1 6    X korvattu
	3 3                  ← numeroilla
	2 1 2 1 2 1 2 1 2
	6 3 0 0 8 7 3 5 2 = 34 → 6
X-tunnusta ei pidä sekoittaa CINS-tunnukseen, joka voi olla samannäköinen kun CINS viittaa suomalaiseen arvopaperiin.

Huom! Edellä esitetty ei perustu mihinkään Netistä löytyneeseen kuvaukseen, vaan aidoista numeroista tekemiini havaintoihin, yleisöltä saatuihin vihjeisiin, Netistä löytyneisiin pikkutietoihin ja merkittävältä osin dokumenttiin ja muihin tietoihin jotka lähetti Marko Turpeinen heinäkuussa 2006.

ISIN ja CUSIP

ISIN = International Securities Identification Number, ISO 6166 -standardin mukainen kansainvälinen koodi, jota käytetään arvopaperien tunnistamiseen. Koodissa on 12 merkkiä:
  1. ISO 3166-1 -standardin mukainen kaksikirjaiminen maatunnus, suomalaisissa koodeissa FI. Poikkeus: Clearstream (ent. Cedel) ja Euroclear käyttävät kansainvälisten arvopaperien yhteydessä tunnusta XS, joka ei viittaa mihinkään maahan (ISO 3166-1 jättää koodit AA, QM..QZ, XA..XZ ja ZZ organisaatioiden sisäiseen käyttöön).
  2. Arvopaperilajin 9-merkkinen tunniste, jossa saa olla numeroita 0..9 ja kirjaimia A..Z.
  3. Tarkiste, yksi numero.
Tarkiste lasketaan kuten Arvo-osuustilin numerossa. Myös kirjainten käsittelytapa on sama. Esimerkki (Finnlines Oyj:n osake): FI0009003644
	 F   I  0 0 0 9 0 0 3 6 4 4    Kirjaimet korvattu
	1 5 1 8                      ← numeroilla
	2 1 2 1 2 1 2 1 2 1 2 1 2
	2 5 2 8 0 0 0 9 0 0 6 6 8 = 46 → 4
Kanadalaisilla ja yhdysvaltalaisilla arvopapereilla on CUSIP-koodi (Committee on Uniform Security Identification Procedures), jossa kirjainten käsittely poikkeaa ISIN:istä sen verran, että painotus kohdistuu suoraan kirjainta vastaavaan lukuun eikä sen numeroihin. Painotuksen jälkeen summaukseen otetaan kuitenkin mukaan tulon numerot, ei itse tuloa. CUSIP-koodissa on kahdeksan numeroa tai kirjainta plus tarkiste; kolme ensimmäistä merkkiä ovat kuitenkin aina numeroita. Esimerkki: 392690QT3
	3 9 2 6 9 0  Q   T  3    Kirjaimet korvattu
	            2 6 2 9    ← numeroilla
	1 2 1 2 1 2   1   2
	3 9 2 3 9 0 2 6 5 8 = 47 → 3
CUSIP:iin sisältyy myös käsite Private Placement Number (PPN). Tällaisissa numeroissa voi esiintyä eräitä erikoismerkkejä, joiden arvot tarkisteen laskennassa ovat: *=36, @=37, #=38.

Kansainvälisiä arvopapereita varten CUSIP:ista on versio nimeltä CINS (CUSIP International Numbering System), jonka ensimmäisessä positiossa on numeron sijasta maa- tai aluetunnuksena kirjain. Muuten rakenne ja tarkisteen laskenta ovat samat. Suomi kuuluu alueeseen "muu Eurooppa", tunnuskirjain X (näitä ei pidä sekoittaa X-tunnuksiin; sekä tunnuksen antaja, käyttötarkoitus että tarkisteen laskenta ovat erilaiset, vaikka muoto saattaa olla sama).

CUSIP Service Bureau (CSB) voi muodostaa CUSIP- tai CINS-koodista CSB-ISIN -koodin lisäämällä eteen maakoodin (CA tai US) ja loppuun ISIN-koodin tarkisteen.

Arvopapereille on myös muita tunnistejärjestelmiä. Esim. SEDOL (Stock Exchange Daily Official List) on brittiläinen järjestelmä, jossa käytettävä tarkiste on kuvattu mm. Wikipediassa. Myös SEDOL:ista voidaan muodostaa ISIN.

Pankkikortti, luottokortti ym.

Tämä koskee ainakin seuraavia kortteja:
  • Pankkikortit, ml. automaattikortit
  • Luottokortit: American Express (AmEx), Diner's Club, Eurocard, MasterCard, Visa
  • E-liikkeen KantaAsiakaskortti, K-kaupparyhmän Plussa-kortti, S-kaupparyhmän S-etukortti, Silja Linen kanta-asiakaskortti, Finnairin Plus-kortti (vuodesta 2001 alkaen jaettu malli, jossa on kolme kolmen numeron ryhmää)
Tarkistusmenettely on Luhnin moduli 10. Luultavasti samaa tarkistusta käytetään hyvinkin monissa erilaisissa muovikorteissa, joita yritykset ja muut organisaatiot jakavat asiakkailleen / jäsenilleen ja jotka ulkonäöltään muistuttavat em. kortteja. Usein esiintyviä tuntomerkkejä ovat: Luottokorttikoko; numero ja mahdollisesti muita tietoja prässättynä kohokuviona tai tavallisena painettuna tekstinä edessä alhaalla; magneettijuova takana ylhäällä; tila haltijan nimikirjoitukselle takana keskellä, nykyisin usein mikropiirin kontaktiliuskat edessä vasemmalla. Samaa menetelmää ei kuitenkaan käytetä näissä viranomaisten antamissa korteissa: Kela-kortti, henkilökortti, ajokortti. Näistä vain henkilökortissa on oma numero; muut käyttävät henkilötunnusta. (Joskus tapaa väitteitä, että vanhemmissa pahvisissa ajokorteissa ei ole lainkaan numeroa, mutta kyllä sellaisen pitäisi löytyä, jos kortin ottaa pois muovikotelosta ja avaa laskokset. Tästä voi olla apua ulkomaisissa autovuokraamoissa.)

Esimerkkejä tarkistuksesta:

Visa-kortti, keksitty numero:

	4 9 2 0  1 9 0 0  7 5 2 6  7 2 7 6
	2 1 2 1  2 1 2 1  2 1 2 1  2 1 2
	8 9 4 0  2 9 0 0  5 5 4 6  5 2 5 = 64 → 6
Silja Linen kanta-asiakaskortti, aidosta kortista hiukan muokattu numero:
	1 1 1 1  6 0  0 0 7 4 2 3 9 4  2 8
	2 1 2 1  2 1  2 1 2 1 2 1 2 1  2
	2 1 2 1  3 0  0 0 5 4 4 3 9 4  4 = 42 → 8
Monissa luottokorteissa (mm. Visa ja Mastercard / Eurocard) kortin taakse on painettu kolminumeroinen tarkistuskoodi. American Express -korteissa vastaava koodi on nelinumeroinen ja painettu kortin etupuolelle. Koodi tunnetaan nimillä CVC2 (Card Verification Code), CVV2 (Card Verification Value), CID (Card Identification Number) sekä usealla muulla nimellä. Koodia ei esitetä kohokuviona eikä sitä löydy kortin magneettijuovasta. Koodia voidaan käyttää mm. Internetissä tai puhelimitse varmistamaan, että maksajalla on maksuhetkellä hallussaan kortti eikä pelkästään sen magneettijuovalta luetut tai mankeloituun kuittiin jääneet tiedot. Koodeista käytetään myös lyhenteitä CVC tai CVV, mutta tämä on virhe: Tämännimiset vanhemmat kooditkin ovat toki olemassa (myös nimillä CVC1 ja CVV1), mutta ne on talletettu magneettijuovalle hoitamaan samantyyppistä tehtävää sähköisissä maksuissa - ne tekevät magneettijuovan tietojen väärentämisen muuten kuin kopioimalla lähes mahdottomaksi. Kaikki nämä koodit tunnetaan yhteisellä nimellä Card Security Code (CSC) tai Credit Card ID (CCID). CVC2 ja CVV2 lasketaan kortin numerosta ja viimeisestä voimassaoloajankohdasta julkisella Triple DES -salakirjoitusalgoritmilla (3DES tai DES3, Data Encryption Standard) käyttäen kunkin luottokorttiyhtiön omia salaisia avaimia, joita ulkopuoliset tiettävästi eivät ole onnistuneet selvittämään. Tosin Internetissä jotkut kauppaavat ohjelmia, joiden väitetään näitä koodeja tuottavan; jos tämä pitää paikkansa, koodit ovat menettäneet merkityksensä turvatekijöinä, mutta minä en ole valmis tällaiseen uskomaan.

Luottokortit ja Internet

Usein varoitetaan luottokorttien numeroiden lähettämisestä Internetin kautta erityisesti salaamattomilla yhteyksillä. Yksi hyvä syy tähän on se, että koska numeron alusta löytyy kortin myöntäjän tunnus, luottokorttien numeroiden pituuden vaihtelu on pieni (yleensä vain yksi, joskus kaksi vaihtoehtoa / luottokorttiyhtiö) ja numeron lopussa on yksi tai kaksi tarkistetta, mikä tahansa Internet-liikennettä tarkkaileva tietokone pystyy isostakin datavirrasta helposti tunnistamaan ja poimimaan talteen salaamattomat luottokorttinumerot. Sama koskee tietysti muitakin määrämuotoisia sensitiivisiä tietoja, kuten henkilötunnuksia. Toisaalta sanotaan myös, ettei ole yhtään todistettua tapausta, jossa luottokortin numero olisi tällä tavoin joutunut vääriin käsiin, kun taas muulla tavoin sitä kyllä on tapahtunut.

Jakelukoodi

Kaikissa tutkituissa tapauksissa uudehkojen suomalaisten lehtien Tuotekoodissa on maatunnuksen (64) jälkeen kustantajasta riippumatta numerot 1488, joita seuraava Lehtipisteiden käyttämä 6-numeroinen Jakelukoodi pysyy samana lehden numerosta toiseen. Jakelukoodi sisältää oman tarkisteensa, jonka laskentamenetelmä on Luhnin moduli 10. Sama koodi löytyy usein viivakoodin läheltä toisestakin numerosarjasta (R-koodi), jonka muut osat löytyvät myös varsinaista Tuotekoodia seuraavasta EAN-5 -lisäkoodista. Esimerkki tarkistuksesta (Tekniikan Maailma):
	6 4 1 4 8 8 8 1 5 0 0 1 8
	            2 1 2 1 2
	            7 1 1 0 0 = 9 → 1
Jakelukoodilla ei näytä olevan mitään yhteyttä lehden ISSN-numeroon. Vanhoissa lehdissä 1488:n tilalla voi olla 1411 ja muitakin eroja voi olla (tarkisteen tilalla näyttää yleensä olevan 0). Lehdissä, joissa ei ole Tuotekoodia, voi olla Jakelukoodin näköinen numerosarja, jossa tarkistusta ei välttämättä käytetä (tämäkin voi olla nimeltään R-koodi). Tällainen numerosarja voi löytyä myös sarjana epäsäännöllisesti julkaistavista kirjoista, kuten sarjakuva-albumeista, mutta numerosarjan loppuosan yksityiskohdat vaihtelevat kustantajasta riippuen. Huom! Tieto käytettävästä tarkistusmenetelmästä ei perustu mihinkään julkaistuun dokumenttiin, vaan kymmenistä aidoista Jakelukoodeista tehtyihin havaintoihin.

T-koodi

T-koodi on Tukkukauppojen Oy:n (= Tuko Oy) kehittämä EAN-Tuotekoodin kaltainen 6..8-numeroinen tunniste. Se otettiin käyttöön 1970-luvulla, jolloin Tuotekoodit eivät vielä olleet niin yleisiä kuin nyt. Koodia käytetään elintarvikkeissa ja käyttötavaroissa, ja nykyisin sen voi löytää esim. Anttilan tavaratalon hintalapuista - ei läheskään kaikista, sillä useimmissa tuotteissa on EAN-koodi. Tarkisteen laskentamenetelmä on Luhnin moduli 10.

Esimerkki (vyön hintalapusta): 3963659

	3 9 6 3 6 5 9
	1 2 1 2 1 2
	3 9 6 6 6 1 = 31 → 9
Hintalapussa on myös viivakoodi, joka näyttää Tuotekoodin viivakoodiesitykseltä, ja kyseessä onkin 02-alkuinen EAN-13, joka voidaan tulkita myös 2-alkuiseksi UCC-12:ksi. Nämä on varattu kaupassa annettaviksi, erotukseksi tavanomaisista valmistajan antamista Tuotekoodeista. Tässä tapauksessa EAN-13 -koodi sisältää T-koodin tarkisteineen oikeaan reunaan tasattuna sekä tietysti Tuotekoodin tarkisteen. Eo. T-koodista muodostettu EAN-13:
	0  2  0  0  0  3  9  6  3  6  5  9  5
	1  3  1  3  1  3  1  3  1  3  1  3
	0  6  0  0  0  9  9 18  3 18  5 27  = 95 → 5
Koodin nimessä oleva T viittaa Tukoon. Huom! Tämä kuvaus ei perustu mihinkään julkaistuun dokumenttiin, vaan Raimo Häliseltä alkuvuodesta 2000 saatuihin tietoihin ja aidoista numeroista tehtyihin havaintoihin.

Nokian puhelimen sarjanumero

Kolmessatoista tutkitussa Nokian GSM-puhelimessa, jotka edustavat kahdeksaa eri mallia, sarjanumerossa (= IMEI, International Mobile station Equipment Identity) on viimeisenä tarkiste jonka laskentamenetelmä on Luhnin moduli 10. Mallit ovat 5110, 6110, 6150, 6210, 6250, 7110, 8210 ja 9110. Sama tarkistus ei kuitenkaan toimi malleissa 1630, 2110 ja 3110, joissa viimeinen numero näyttää aina olevan nolla. Tarkistus on ilmeisesti otettu käyttöön vasta uudemmissa puhelimissa. Esimerkki:
	4 9 3 0 0 5 / 1 0 / 0 6 0 1 5 3 / 6
	1 2 1 2 1 2   1 2   1 2 1 2 1 2
	4 9 3 0 0 1   1 0   0 3 0 2 5 6 = 34 → 6
Kolme ensimmäistä kauttaviivoin erotettua osaa ovat TAC (Type Approval Code, 6 numeroa), FAC (Final Assembly Code, 2 numeroa) ja SNR (Serial Number, 6 numeroa). TAC:n ensimmäiset numerot ovat tyyppihyväksynnän myöntäneen maan tunnus; kaikissa tutkituissa puhelimissa joko 44 (Yhdistynyt kuningaskunta) tai 49 (Saksa), eli tämä näyttäisi olevan sama kuin ao. maan kansainvälinen suuntanumero. Suomessa tyyppihyväksytyn puhelimen maatunnus on kuitenkin 35, joka on vain suuntanumeron (358) alkuosa. TAC:n loput numerot oletettavasti osoittavat epäsuorasti puhelimen merkin ja mallin, mutta samanmallisissakin puhelimissa voi olla eri numeroita. FAC kertoo tehtaan, jossa loppukokoonpano on tehty - välillisesti siis myös valmistusmaan; Nokialla on käytössä ainakin seuraavat koodit:
10Salo, Suomi90Special Products, Saksa
20Bochum, Saksa91Elcoteq, Tallinna, Viro
30Korea92Elcoteq, Suomi
40Beijing, Kiina93Elcoteq, Unkari
70Salo Components, Suomi 
Sama FAC voi esiintyä eri valmistajilla, koska erilaiset TAC:t estävät samaa FAC:tä käyttävien tehtaiden sekoittamisen toisiinsa. SNR yksilöi puhelimen. Samaa IMEI-järjestelmää käyttävät kaikki GSM-puhelinten (Global System for Mobile communications) valmistajat, mutta on epäselvää käyttävätkö kaikki tarkistetta. IMEI löytyy yleensä puhelimesta akun alta, mutta sen voi myös kysyä näppäilyllä *#06# (jos painettu ja puhelimen ilmoittama IMEI eivät ole samat, puhelimen historiassa voi olla jotakin hämärää).

IMEI:n sisällöstä on tarjolla runsaasti ristiriitaisia tietoja, joista monet voidaan todeta vääriksi koska ne eivät sovi yhteen todellisten puhelimissa olevien numeroiden kanssa. Tässä annetut tiedot perustuvat omiin havaintoihini ja niiden kanssa parhaiten yhteensopiviin dokumentteihin, ml. kaksi ETSI:n (European Telecommunications Standards Institute) virallista standardimääritystä.

Joskus väitetään että IMEI voi olla 16-numeroinen, mutta tällöin kyseessä on IMEISV, jossa tarkisteen tilalla on kaksinumeroinen SVN (Software Version Number). Tässä muodossa tunnus voidaan lähettää puhelimesta tukiasemalle. Jos lähetetään pelkkä IMEI, tarkisteen paikalla on 0.

Edelläkuvattuja sarjanumeroita käyttäen yksittäisessä tehtaassa voidaan valmistaa miljoona saman tyyppihyväksynnän mukaista puhelinta, mutta tämä ei ilmeisesti riitä. Koska esim. IMEI:n pidentäminen olisi hyvin suuritöistä, on ehdotettu mm. että IMEI muutetaan käyttämään heksadesimaalinumeroita; tämä muutos olisi puhelinten valmistajille teknisesti yksinkertainen, koska nytkin IMEI talletetaan BCD-muodossa. Miljoonan sijasta voitaisiin valmistaa 16,7 miljoonaa puhelinta. Tarkisteen laskennan periaate pysyisi ennallaan, mutta laskenta tehtäisiin 16-kantaisessa lukujärjestelmässä, jolloin menetelmä olisi nimeltään "Luhnin moduli 16". Yhteensopivuuden säilyttämiseksi muutos ei tietenkään koskisi olemassaolevia sarjanumeroita. Operaattorit ovat suhtautuneet hankkeeseen nihkeästi, ja käytännössä ratkaisu voikin olla FAC:n ja SNR:n yhdistäminen, jolloin yhdellä tyyppihyväksynnällä voidaan valmistaa sata miljoonaa puhelinta. Näin tarkisteen laskenta säilyisi ennallaan myös GSM-puhelinten seuraajissa.

SIM-kortin sarjanumero

GSM-puhelimissa käytettävissä SIM-korteissa (Subscriber Identity Module) on sarjanumero (Integrated Circuit Card ID, ICCID), jossa olevan tarkisteen laskentamenetelmä on Luhnin moduli 10. Esimerkki (keksitty):
	0 1 0 5  1 2 3 1  4 1 6 1
	2 1 2 1  2 1 2 1  2 1 2
	0 1 0 5  2 2 6 1  8 1 3 = 29 → 1
Usein jokin osa kortin numerosta voidaan tulkita valmistusajankohdaksi kuukauden tai ehkä jopa päivän tarkkuudella. Jotkin muut osat numeroista voivat olla operaattori- tai maatunnuksia. Operaattorikohtaiset erot ovat kuitenkin niin suuria, että kattavan luettelon laatiminen olisi työlästä, osittain arvailujen varassa, eikä varsinaisesti kuulu tämän dokumentin aihepiiriin.

Junakalustoyksikön sarjanumero

Euroopan unionin 11.08.2006 tekemän päätöksen mukaan EU:ssa otetaan käyttöön uusi junakaluston sarjanumerojärjestelmä, European Vehicle Number (EVN), joka näyttää olevan aivan sama kuin järjestelmä, jonka on jo aikaisemmin määritellyt Kansainvälinen rautatieliitto UIC (Union Internationale des Chemins de Fer). Suomessa ensimmäinen uuden järjestelmän mukainen numero otettiin käyttöön 10.11.2008, kun ensimmäinen pääkaupunkiseudun lähiliikenteeseen hankituista Sm5- eli FLIRT-sähkömoottorijunista tuotiin Suomeen. Vähitellen uudet numerot tulevat käyttöön kaikessa säännöllisesti käytettävässä kalustossa. Uusi sarjanumerointi ei estä vetokaluston vanhojen tyyppimerkintöjen ja sarjanumeroiden (esim. Dv12 2714) eikä vaunujen tyyppiä osoittavien kirjainkoodien (esim. Gbln) käyttöä. Uusi sarjanumero eli standarditunnus on muotoa AA BB CCCC DDD-T jossa:
  • AA osoittaa kalustoyksikön tyypin (Sm5:ssä 94 = sähkömoottorijuna, muu kuin suurnopeusjuna)
  • BB on maatunnus (Suomi = 10)
  • CCCC kertoo kalustoyksiköstä teknisiä tietoja (Sm5:ssä 2081); koodien merkitys riippuu kalustoyksikön tyypistä; joissakin maissa tämä osuus alleviivataan
  • DDD on yksilönumero
  • T on tarkiste, jonka laskentamenetelmä on Luhnin moduli 10
Esimerkkinä ensimmäinen Suomeen tuotu Sm5: 94 10 2081 001-1
	9 4  1 0  2 0 8 1  0 0 1 - 1
	2 1  2 1  2 1 2 1  2 1 2
	9 4  2 0  4 0 7 1  0 0 2 = 29 → 1
Täydellinen koodiluettelo on kymmeniä sivuja pitkä, joten en edes yritä toistaa sitä tässä. Sarjanumeron ryhmittelyssä on vaihtelua ainakin seuraavasti:
  • Vetokalustossa teknisten tietojen koodit ja yksilönumero voidaan kirjoittaa yhteen. Painetussa tekstissä koko numerosarja voidaan kirjoittaa yhtenäisenä, paitsi tarkiste joka tällöinkin erotetaan väliviivalla.
  • Matkustajavaunuissa teknisten tietojen koodit voidaan esittää kahdessa kahden numeron ryhmässä, joiden välissä on väliviiva.
  • Tavaravaunuissa koodi kirjoitetaan tilan salliessa (eli matalimpia avovaunuja lukuun ottamatta aina) kolmelle riville, ja mukaan liitetään myös kirjainkoodeja numerokoodien selitykseksi (esim. 10 VR). Kirjainkoodit eivät vaikuta tarkisteeseen.
Joissakin tapauksissa käytetään poikkeavaa ryhmittelyä, mutta minulla ei ole asiasta tarkempia tietoja. Ryhmittelystä riippumatta koodin kokonaispituus on aina 12 numeroa. Lähde: Resiina-lehti 4/2008 s. 40 ja Internetistä löytynyt dokumentti.

Suomen rautateillä voi nähdä myös ulkomaisia vaunuja, useimmiten venäläisiä (maatunnus 20), joskus myös ruotsalaisia (74).

Suomalaisten tavaravaunujen vanha numerointi

Ennen yhtenäisen EU-numeroinnin käyttöönottoa suomalaisissa kotimaan liikenteen tavaravaunuissa on ollut sarjanumero, joka havaituissa tapauksissa muodostuu 5..6 numerosta, väliviivasta ja tarkistenumerosta, jonka laskentamenetelmä on Luhnin moduli 10. Varsinainen numero määräytyy siten, että ao. vaunusarjalle varatuista numeroista otetaan ensimmäinen vapaana oleva. Lähde: Resiina-lehti 3/1988 s. 30. Esimerkki: 463892-0
	4 6 3 8 9 2 - 0
	1 2 1 2 1 2
	4 3 3 7 9 4   = 30 → 0
Kansainvälisen liikenteen vaunuissa UIC:n numerointia on käytetty jo pitkään. - Australiassa veturien ja vaunujen kirjaimista ja numeroista muodostuvat sarjanumerot tarkistetaan omintakeisella moduli 23 -algoritmilla.

Yksilöintitunnus

Valitettavasti tomppeli lainsäätäjä on valinnut tunnisteelle niin yleisluonteisen nimen, että otsikkoa voidaan joutua muuttamaan tulevaisuudessa. (Laki 46/2009)

Sosiaali- ja terveysalan lupa- ja valvontavirasto Valvira antaa lääkärille ja hammaslääkärille, valtioneuvoston asetuksessa säädetyt opinnot (= vähintään neljä opintovuotta) suorittaneelle lääketieteen tai hammaslääketieteen opiskelijalle sekä lääkkeen määräämiseen oikeutetulle sairaanhoitajalle, suuhygienistille ja optikolle Yksilöintitunnuksen, jota tämän tulee käyttää laatiessaan mm. tutkimus-, hoito- ja lääkemääräyksiä ja lääkärintodistuksia.

Yksilöintitunnus korvasi 01.03.2009 Sairausvakuutusnumeron (SV-numero), joita Kansaneläkelaitos aikaisemmin antoi lääkäreille ja hammaslääkäreille. Vanhat Sv-numerot kelpaavat sellaisenaan Yksilöintitunnuksiksi, eikä lääkärien tarvitse uusia leimasimiaan tunnuksen nimen muuttumisen vuoksi. Paremman tiedon toistaiseksi puuttuessa oletan, että tunnukset ovat samanmuotoisia (lakiteksti ei määrittele Yksilöintitunnuksen tarkkaa muotoa). Sv-numero on kuusinumeroinen ja sen tarkistusmenetelmä on Luhnin moduli 10.

Esimerkki (keksitty): SV 275230

	2 7 5 2 3 0
	2 1 2 1 2
	4 7 1 2 6 = 20 → 0
Huom! Tieto käytettävästä tarkistusmenetelmästä ei perustu mihinkään julkaistuun dokumenttiin, vaan ainoastaan lääkemääräyksistä ja lääkärintodistuksista tehtyihin havaintoihin.

Ruotsalainen henkilötunnus (PNR)

Ruotsalainen henkilötunnus personnummer (PNR) muistuttaa suomalaista, mutta syntymäajan järjestys on vuosi-kuukausi-päivä ja tarkisteen laskentamenetelmä on Luhnin moduli 10. Sukupuoli tunnistetaan kuten Suomessa. Tunnuksia alettiin jakaa vuonna 1947; tuolloin annetut tunnukset kertovat jotakin henkilön silloisesta asuinpaikasta. Myöhemmin mutta ennen vuotta 1990 annetuissa tunnuksissa yksilönumerosta voidaan (useimmiten) päätellä henkilön syntymäpaikka läänin tarkkuudella. Tarkiste lisättiin 1967. Välimerkki on alun perin "-" mutta vaihtuu "+":ksi sinä vuonna jona henkilö täyttää sata vuotta (on ihme jos tämä ei aiheuta sekaannusta). Lähteenä on käytetty mm. Ruotsin verohallinnon kotisivua. (Ehkä maan luonteesta kertoo jotakin se, että Ruotsissa tunnukset antaa verohallinto, kun esim. Suomessa ja Tanskassa ne kuuluvat väestökirjanpidon toimialaan.)

Esimerkki ruotsalaisesta henkilötunnuksesta: 770311-3519

	7 7 0 3 1 1 - 3 5 1 9
	2 1 2 1 2 1   2 1 2
	5 7 0 3 2 1   6 5 2 = 31 → 9
Ruotsalaisten valitsema tarkistusmenetelmä ei voine olla tähän tarkoitukseen paras mahdollinen, sillä syntymäaika muodostuu kahden numeron ryhmistä, eikä tarkistus paljasta näiden ryhmien järjestyksen vaihtumista, eli vaikka päivämäärä muistettaisiin sopivasti väärin, tunnus olisi edelleen muodollisesti virheetön. Eo. tunnuksesta muokattu esimerkki:
	7 7 1 1 0 3 - 3 5 1 9
	2 1 2 1 2 1   2 1 2
	5 7 2 1 0 3   6 5 2 = 31 → 9
Suomalaisessa henkilötunnuksessa kahden päivämäärään kuuluvan kentän (esim. päivän ja kuukauden) vaihtuminen keskenään havaitaan tarkisteen avulla aina, jos vaihto tuottaa muodollisesti virheettömän päivämäärän. Ruotsalaisessa tunnuksessa tarkiste ei paljasta tällaista virhettä koskaan.

Yhden lähteen mukaan päivä tai sekä päivä että kuukausi voivat olla nollia, mikä merkitsee ao. tiedon puuttumista. Tämä lienee tarpeen, koska Ruotsiin on muuttanut paljon ihmisiä maista, joissa tarkkoja syntymäpäiviä ei aina ole merkitty muistiin. Jos tällainen käytäntö olisi myös Suomessa, sen olisi varmaankin pitänyt tähän mennessä tulla jossakin vastaan. - Suomessa kerrotaan kyllä olevan henkilöitä, joiden virallinen syntymäpäivä poikkeaa todellisesta, mutta heitä ei ole helppo yksilöidä pelkän henkilötunnuksen avulla.

Jos vuosiluvun kahta ensimmäistä numeroa (18, 19 tai 20) tarvitaan, ne liitetään varsinaisen henkilötunnuksen eteen (niitä ei oteta huomioon tarkistetta laskettaessa). Juridisten henkilöiden vastaavassa tunnisteessa (organisationsnummer, annettu vuodesta 1975 alkaen) etuliite on tarvittaessa 16, esim. 16 916570-2292. Nämä tunnukset erottaa henkilötunnuksista siitä, että positioissa 3..4 on kuukauden numeron sijasta 20 tai sitä suurempi luku. Tunnuksia käyttävät lähinnä verottaja ja muut viranomaiset.

Ulkomaalaisille, joille ei voida antaa ruotsalaista henkilötunnusta, mutta jotka tarvitsevat Ruotsissa jonkin tunnuksen, voidaan eräiden ruotsalaisten viranomaisten pyynnöstä antaa samordningsnummer, joka on muuten kuin personnummer, mutta kuukauden päivään on lisätty 60. Tällaisia henkilöitä ovat esim. tilapäisesti Ruotsissa työskentelevät, naapurimaasta päivittäin työssä käyvät, yliopisto-opiskelijat, ruotsalaisissa laivoissa työskentelevät, henkilöt jotka tarvitsevat ruotsalaisen ajokortin sekä vangit. Näitä tunnuksia on jaettu vuoden 2000 alusta alkaen.

Tunnukset ovat loppumassa kesken, koska Ruotsiin on muuttanut paljon ihmisiä maista, joissa syntymäpäiväksi kirjataan aina 1.1. tai 1.7., olipa todellinen syntymäpäivä mikä tahansa. Tämän vuoksi kesäkuussa 2008 on ehdotettu, että vuoden 2010 alusta alkaen annettavissa tunnuksissa (vastasyntyneet, maahanmuuttajat ja tunnusta vaihtavat) vuosi ja kuukausi ovat kuten nykyisin, mutta positioihin 5..6 tuotetaan syntymäpäivän sijasta satunnainen luku väliltä 01..31 (näin asia on uutisoitu, mutta koska yhdeksi tavoitteeksi on asetettu mahdollisimman pienet muutoskustannukset, oletan että todellisuudessa yläraja vaihtelee kuukauden pituuden mukaan kuten tähänkin saakka). Muuten tunnus pysyy ennallaan. Vanhat tunnukset eivät muutu. Samalla on ehdotettu, että jatkossa annetaan personnummer monille sellaisille henkilöille, joille nyt annetaan samordningsnummer.

MSI-viivakoodi

Harvinainen MSI-viivakoodi tunnetaan myös nimillä MSI Plessey ja Modified Plessey, mutta sitä ei silti pidä sekoittaa Plessey-viivakoodiin. MSI-viivakoodissa käytetään tarkistetta, joka on matemaattisesti yhtäpitävä Luhnin moduli 10:n kanssa, mutta jostain syystä laskentamenetelmä esitetään tässä tapauksessa eri tavalla. Tämän eron vuoksi kuvauksen sisällyttäminen tähän dokumenttiin on paikallaan huolimatta siitä, mitä Johdannossa sanotaan viivakoodeista. Laskenta:
  1. Tarkistettavasta numerosarjasta poimitaan ensimmäinen numero oikealta ja siitä vasemmalle joka toinen numero.
  2. Poimituista numeroista muodostetaan uusi luku. Numeroiden järjestys on sama kuin alkuperäisessä luvussa (mikä ei kylläkään vaikuta lopputulokseen). Näin saatu luku kerrotaan kahdella. Tulon numerot lasketaan yhteen.
  3. Summaan lisätään ne numerot, joita ei otettu mukaan kohdassa 1.
  4. Tarkiste on numero, joka kohdan 3 summaan on lisättävä, jotta tulos olisi tasan jaollinen kymmenellä.
Esimerkki: Tarkistettava numerosarja on sama kuin kohdassa Pankkikortti, luottokortti ym. 4920 1900 7526 7276. Poimimalla joka toinen numero saadaan 42107277. Kahdella kerrottuna 84214554. Numeroiden summa on 33. Numeroiden 9, 0, 9, 0, 5, 6 ja 2 summa on 31. 33+31=64 → tarkiste on 6.

Luhnin modulin sanotaan olevan vapaasti kenen tahansa käytettävissä (vaikka se on patentoitu, patentti tuskin on enää voimassa). Kaikista tarkistusmenetelmistä tällaista ei nimenomaisesti sanota, mutta eipä ole myöskään tullut vastaan yhtään tapausta, jossa jonkin menetelmän käyttö yritettäisiin kieltää sillä perusteella, että joku omistaa siihen yksinoikeuden. Jokin tämäntapainen syy on kuitenkin voinut johtaa saman menetelmän kuvaamiseen niin erilaisilla tavoilla, että niitä voisi ensi silmäyksellä pitää eri menetelminä. Tiedossani on myös ainakin yksi sovellusalue, jolla menetelmät pidetään salaisina: Tanskalaisten pankkitilien numeroiden tarkistus. Joidenkin muidenkin tunnisteiden kehittäjät / ylläpitäjät ilmoittavat että tarkistetta käytetään, mutta kieltäyttyvät kertomasta sen laskentatapaa.


Moduli 10

Menetelmää käytetään Tuotekoodissa, ISMN-numerossa ja ISBN-13 -numeroissa. Sekä tavallisessa että lomitetussa 2/5 viivakoodissa (2 of 5 ja Interleaved 2 of 5) voidaan valinnaisesti käyttää samaa tarkistusta.

Nimitystä Moduli 10 käytetään usein muistakin kuin tässä kappaleessa kuvattavasta menetelmästä (yhteensä ainakin kymmenestä). Yhteistä kaikille on luvun 10 käyttäminen jakajana, mutta muut yksityiskohdat vaihtelevat.

Tuotekoodi

Tuotekoodin tarkistusohjelma

Yleistä

Tuotekoodi löytyy sekä numerosarjana että viivakoodina useimmista kaupoissa myytävistä tuotteista. Tuotekoodi yksilöi tuotteen maailmanlaajuisesti valmistajalta läpi koko jakeluketjun aina kassalle saakka, mikä helpottaa tavaroiden tunnistamista ja tuottaa suuria kustannussäästöjä. Vuoden 2005 helmikuusta alkaen kaikkien Tuotekoodien muodostama järjestelmä ja siitä vastaava kansainvälinen organisaatio tunnetaan nimellä GS1 eli General Standard 1. Nimi viittaa siihen, että tällä alalla on vain yksi maailmanlaajuinen standardi. Aikaisemmin käytetyistä nimistä johdetut lyhenteet pysyvät silti käytössä eri koodien nimissä. Tässä kuvattava tarkistusmenetelmä koskee seuraavia koodeja:

KoodiLyhyt kuvausVaihtoehtoisia nimiäVastaava viivakoodi
EAN-13Suomessa ja useimmissa muissa maissa tavallisin, 13-numeroinen koodi.  EAN-13 ITF-14
EAN-88-numeroinen koodi; tarkoitettu käytettäväksi tuotteissa, joissa täyspitkälle koodille ei ole tilaa (käytäntö ei aina vastaa teoriaa).  EAN-8
EAN-14EAN-13:n pidennetty 14-numeroinen versio. Käytetään yksittäistä kuluttajapakkausta suuremmissa tuote-erissä.EAN/UCC-14, DUN-14 (Distribution Unit Number), SCC-14 (Shipping Container Code)ITF-14
UCC-1212-numeroinen koodi. Käytetään Yhdysvalloissa ja Kanadassa EAN-13:n sijasta. UPC-A UPC-E ITF-14
SSCCSSCC = Serial Shipping Container Code.18-numeroinen koodi, jota käytetään kuten EAN-14:ä. SSCC:llä ei tunnisteta tuotteita vaan tuotelähetyksiä. SSCC-18, sarjatoimitusyksikkökoodiEAN-128
GLNGlobal Location Number. Vastaa muodoltaan EAN-13:a. Käytetään yritysten / laitosten ja niiden fyysisten, loogisten tai juridisten toimipaikkojen tunnistamiseen.EAN Location Number, EAN Location Code, International Location Number (ILN), maailmanlaajuinen osapuolitunnisteEAN-128

  • EAN-koodit (European Article Number tai International Article Number) ovat yleismaailmallisia.
  • UCC = Uniform Code Council, Tuotekoodeista Yhdysvalloissa ja Kanadassa vastaavan organisaation aikaisempi nimi, nykyisin GS1 USA.
  • UPC = Uniform Product Code, aikaisemmin Universal Product Code.
  • UPC-A on 12-numeroinen viivakoodi. Eräät UCC-12 -koodit voidaan nollia pois jättämällä tiivistää lyhyemmiksi, jolloin ne voidaan esittää UPC-E-viivakoodina, jota käytetään kuten EAN-8:a. Tarkisteen laskeminen (ja kaikki muukin käsittely tietojärjestelmissä) edellyttää koodin palauttamista 12-numeroiseksi.
  • Numeeriset koodit EAN-13, EAN-8, EAN-14 ja UCC-12 tunnetaan yhteisellä nimellä Global Trade Item Number (GTIN, maailmanlaajuinen tuotenumero).
  • GLN: Muutamissa maissa (Ranska, Benelux-maat, Etelä-Afrikka) tarkisteen laskenta voi poiketa kansainvälisestä käytännöstä. GLN ja EAN-13 voivat olla identtisiä; sekaannuksen vaaraa ei ole, koska asiayhteydestä käy aina ilmi kummasta on kyse.
  • Viivakoodit EAN-13, EAN-8, UPC-A ja UPC-E tunnetaan yhteisellä nimellä GS1-viivakoodi. Näitä käytetään vain Tuotekoodien esittämiseen. Koodit eroavat toisistaan siten, että viivakoodinlukija pystyy ne tunnistamaan, mutta kaikki perustuvat samaan symbolijärjestelmään.
  • ITF = Interleaved Two of Five (I25, lomitettu 2/5). Yleiskäyttöinen viivakoodi, jota voidaan käyttää mm. Tuotekoodien esittämiseen. Muut kuin EAN-14 esitetään ITF-muodossa yleensä vain, jos pinnan laatu tekee GS1-viivakoodin lukemisen tavallista alttiimmaksi virheille (esim. aaltopahvi). ITF on tiivis tapa esittää lyhyitä numerosarjoja. Se on myös yksinkertainen - ainoa viivakoodi jota osaan lukea ilman käsillä olevia dokumentteja.
  • Koodien nimissä mainitut numeromäärät sisältävät aina tarkistenumeron.
  • EAN-128:a ei kuvata tässä dokumentissa tarkemmin.
UCC-12 -koodia käytetään siis USA:ssa ja Kanadassa - joskus myös muunmaalaisissa tuotteissa, joita viedään näihin maihin. UCC-12 voidaan tulkita EAN-13:n erityistapaukseksi, jossa ensimmäinen numero on aina nolla ja jätetään yleensä merkitsemättä. EAN-13 voidaan samalla tavalla tulkita EAN-14:n erityistapaukseksi. Tietojärjestelmissä kaikki GTIN-koodit esitetään 14-numeroisina, oikeaan reunaan tasattuina ja tarpeen mukaan etunollitettuina.

Kansainvälinen GS1 laatii Tuotekoodeja koskevat kansainväliset standardit ja jakaa maatunnukset. Kussakin GS1:een liittyneessä maassa on kansallinen GS1-organisaatio (nimeltään GS1 <maan nimi>), joka laatii kansainvälisten standardien puitteissa kansalliset standardit ja jakaa valmistajatunnukset. Kukin valmistaja antaa koodit omille tuotteilleen. Tämän järjestelmän puitteissa kukaan ei ylläpidä kansallista tuotetunnusrekisteriä tai kansainvälistä valmistajatunnusrekisteriä. (Tosin jotkin yritykset kokoavat koodiluetteloita ja myyvät niitä tukku- ja vähittäisliikkeille.) Järjestelmä on siis hyvin hajautettu, tulee toimeen minimimäärällä hallinnointia ja kustannuksia ja pystyy sopeutumaan paikallisiin tarpeisiin. Silti jokainen valmistajan antama Tuotekoodi on maailmanlaajuisesti uniikki. Ei mikään vähäinen saavutus.

Poikkeuksia: GS1 voi antaa tunnuksia suoraan valmistajille tai jopa yksittäisille tuotteille maissa, joissa kansallista GS1-organisaatiota ei ole. EAN-8 -koodit kansallinen GS1 antaa suoraan yksittäisille tuotteille, koska näitä koodeja on melko rajoitetusti.

Vaikka tässä esityksen lyhentämiseksi puhutaan valmistajasta koodin antajana, tällä tarkoitetaan kaikkia niitä tahoja jotka antavat koodeja yksittäisille tuotteille.

Lähteinä on käytetty mm. GS1:n (entinen EAN International), GS1 USA:n (entinen Uniform Code Council) ja GS1 Finlandin (entinen EAN-Finland) kotisivuja. GS1 USA on GS1:n jäsen; Uniform Code Council oli rinnakkainen EAN Internationalin kanssa.

Tuotekoodin tavanomainen rakenne

EAN-8:n kaksi tai kolme ensimmäistä numeroa ovat maatunnus ja seuraavat viisi tai neljä numeroa osoittavat sekä valmistajan että tuotteen. Viimeinen numero on tarkiste. Monissa tapauksissa EAN-13 jakautuu osiin seuraavasti: Maatunnus (2 tai 3 numeroa), valmistaja (5 tai 4 numeroa), tuote (5 numeroa) ja tarkiste (1 numero). Valmistajatunnus voi kuitenkin olla pitempi ja tuotetunnus vastaavasti lyhyempi tai päinvastoin - pitemmät valmistajatunnukset ovat halvempia. Useilla Euroopan mailla ja eräillä muilla taloudellisesti tärkeillä mailla (Japani) on kaksinumeroiset maatunnukset, kun taas pienemmät, myöhemmin mukaan tulleet ja/tai Euroopan ulkopuoliset maat ovat saaneet kolminumeroiset maatunnukset. Joillakin isoilla Euroopan mailla (Italia) on useita kaksinumeroisia ja joillakin muilla isoilla mailla (Kiina) useita kolminumeroisia maakoodeja. Myös nelinumeroisia maatunnuksia on käytössä.

Suomalaiset koodit alkavat yleensä numeroilla 64, mutta maatunnus ei automaattisesti kerro valmistusmaata, vaan koodin voi antaa myös esim. maahantuoja, pakkaaja tai kauppiaiden yhteenliittymä. Jos samaa tuotetta valmistetaan useissa maissa, kaikki voivat käyttää yhden valmistusmaan tai yhtiön pääkonttorin sijaintimaan koodia. Esim. suomalainen maahantuoja voi antaa thaimaalaiselle tonnikalapurkille suomalaisen Tuotekoodin, ja sekä suomalaisissa että italialaisissa Coca-Cola -pulloissa oli belgialainen Tuotekoodi (54; Suomessa koodi vaihtui 64-alkuiseksi vuonna 2008 kun siirryttiin käyttämään pantillisia kertakäyttöpulloja). Suomessa valmistajatunnukset ovat yleensä 5- tai 7-numeroisia ja tuotetunnukset vastaavasti 5- tai 3-numeroisia. EAN-13:lla on useita erikoistapauksia.

Harvinainen 0-alkuinen EAN-13 on itse asiassa UCC-12, jollaiseksi viivakoodinlukijakin sen tunnistaa, vaikka se olisi tulostettu EAN-koodin näköisenä. Tämä voidaan ymmärtää niin, että 0 on Yhdysvaltain ja Kanadan poikkeuksellinen yksinumeroinen maatunnus, vaikkei asiaa kovin usein näin esitetä. Olen nähnyt tällaisia koodeja CD-levyjen koteloissa. Toinen numero (= normaalisti UCC-12 -koodin ensimmäinen tulostuva numero) kertoo UCC-12 -koodin tarkemman tyypin, ja muut numerot ovat kuten EAN-13:ssa. Joissakin tapauksissa kahdella tai kolmella valmistajalla voi olla sama 5-numeroinen valmistajatunnus, jolloin ne erotetaan edeltävän numeron (0, 6 tai 7) perusteella. Vuodesta 2000 alkaen UCC-12 -koodit voivat alkaa myös numeroilla 1, 8 ja 9 ja valmistajatunnuksen pituus voi vaihdella. UCC-12 -koodin ensimmäinen numero voi olla muu kuin tässä mainittu; tällaisilla numeroilla on erityismerkityksiä. Yhdysvalloille on varattu myös EAN-tunnusten maakoodit 10..13 ja Kanadalle 754..755.

Kuljetuspakkausten koodit

EAN-14 on muuten kuten EAN-13, mutta eteen on lisätty yksi numero, joka kertoo jotakin kuljetuspakkauksen sisällöstä, tavallisesti sisällä olevien identtisten kuluttajapakkausten lukumäärästä:
  • 0 = Tavallinen EAN-13 etunollitettuna (yksi pakkaus).
    Tai: Standardivalikoima erilaisia tuotteita, joilla kullakin on oma koodinsa. Tällaisessa tapauksessa EAN-14 yksilöi ko. valikoiman, ja koodin loppuosa poikkeaa sisällä olevien pakkausten koodeista.
  • 1..8 = Katsotaan tietokannasta ao. tuotteen kohdalta. Numero ei kerro kuluttajapakkausten määrää suoraan, ja numeroa vastaava yksikkömäärä vaihtelee riippuen siitä mikä tuote on kyseessä. Numerosarjan loppuosa (paitsi tarkiste) on sama kuin erään sisältyvissä tuotteissa.
  • 9 = Epämääräinen koko eli tieto on saatava jostakin muualta. Sisällöllä ei ole omaa koodia (esim. painon mukaan myytävä tuote).
Esimerkki: Panda salmiakkilakritsi. Yksittäisen patukan koodi on 6412500070010. 40 patukkaa sisältävän laatikon koodi on 16412500070017, jonka selitteeksi on tässä tapauksessa merkitty "DUN" (vrt. kohta Yleistä). Molemmat koodit on merkitty pakkaukseen numeroin, ja EAN-14 myös viivakoodilla ITF-14.

SSCC:ssä ensimmäinen numero kertoi aikaisemmin pakkauksen tyypin (ei kokoa), vaihtoehdot 0..4 olivat käytössä. Vuoden 2001 alusta lähtien lähettäjä saa määritellä tämän numeron ja sen merkityksen vapaasti. Seuraavat numerot ovat lähettäjän tunnus, sama kuin EAN-13:n maa- ja valmistajatunnus, usein 7-numeroinen mutta pituus voi vaihdella. Näitä seuraa lähetyksen sarjanumero, jolle lähettäjä voi halutessaan määritellä sisäisen rakenteen omien tarpeidensa mukaan (tietokannan kautta selvitettävissä esim. sisältö, lähetyspäivä, kuljetustapa ja vastaanottaja). Maatunnuksen, valmistajatunnuksen ja sarjanumeron yhteinen pituus on 16 numeroa. Viimeisenä on tarkiste. SSCC:n edessä voi olla sovellustunnus (00). Samaa SSCC:tä ei saa käyttää uudelleen ennen kuin vuoden kuluttua edellisestä käyttökerrasta. SSCC-koodattu kuljetuspakkaus voi sisältää pakkauksia joiden päällä on EAN-14.

EAN-13:n erikoistapauksia

Tämä ei pyri olemaan täydellinen luettelo, vaan vain kokoelma esimerkkejä sen havainnollistamiseksi, kuinka monimuotoinen ilmiö Tuotekoodi on.

2- ja 02-alkuiset koodit on varattu käytettäviksi tuotteissa, joille valmistaja ei anna normaalia Tuotekoodia. Tällaisia ovat esim. painon mukaan myytävät tuotteet. Käytännöt vaihtelevat maittain. Suomessa käytettävät koodit muodostuvat seuraavista osista:

Kaupan sisäinen käyttö, mm. kaupassa punnittavat tuotteet ja pullonpalautuskuitit20Vakio 00 Tuotteen tunnus, 4 numeroaHH,HH Tarkiste
21HHH,H
22HHHH
28Tuotteen tunnus, 5 numeroa HHH,HH
Kaupan sisäinen käyttö 02Tuotteen tunnus, 10 numeroa
23 Vakio 00Tuotteen tunnus, 4 numeroa P,PPP
24PP,PP
25PPP,P
Tehtaalla yksitellen punnittavat tai muuten mitattavat tuotteet23 Valmistajan tunnus, 4 numeroa Tuotteen tunnus, 2 numeroaP,PPP
24PP,PP
25PPP,P
  • H = hinta, P = paino tai muu yksikkö. Desimaalipilkku ei sisälly koodiin, vaan sen paikka päätellään koodin alkuosasta.
  • 21..22-alkuisissa koodeissa summa on pyöristetty, joten viivakoodista kassalla luettava hinta voi poiketa numeroin merkitystä.
  • Joissakin maissa on oma koodinsa kappaleittain myytäville tavaroille (eli koodi ilmoittaa hinnan tai painon sijasta esim. laatikossa olevien leivosten lajin ja lukumäärän), mutta Suomessa käytetään samoja koodeja kuin kaupassa punnittavilla tuotteilla. Loogisesti tällainen koodi voisi olla Suomessa 26-alkuinen (PPPP).
  • Vakiomittainen tuote, jolla ei ole omaa EAN-koodia, voidaan yksilöidä kaupassa 02-alkuisella koodilla; tästä on esimerkki kohdassa T-koodi.
  • GS1 Finland suosittelee, että myymälät antavat tuotteille tunnuksia seuraavan ryhmittelyn mukaisesti:
    • 0001..0999 Myymälän itse numeroimat tuotteet
    • 1000..1999 Liha, grillituotteet
    • 2000..2999 Liha- ja einesvalmisteet
    • 3000..3499 Juustot, kananmunat
    • 3500..3999 Leipomotuotteet
    • 4000..4999 Kalat ja äyriäiset
    • 5000..5999 Tuoreet hedelmät
    • 6000..6999 Juurekset, vihannekset, marjat ja sienet
    • 7000..8999 Varalla
    • 9000..9999 Muut tuotteet
  • Vaikka 23..25-alkuisiin koodeihin tavallisesti sisältyy ostoksen paino, muut vaihtoehdot ovat mahdollisia. Jos esim. kauppa on antanut metreittäin myytävälle köydelle koodin 9876, hintalappuun tulostettu 2400987611257 tarkoittaa, että köyttä on ostettu 11,25 metriä, mistä kassajärjestelmä osaa laskea hinnan.
  • Valmiiksi pakattu liha on hyvä esimerkki valmistajan (pakkaajan) yksitellen punnitsemista tuotteista; koska pakkausten painoissa on vaihtelua, hinnat vaihtelevat samassa suhteessa.
  • Nelinumeroisesta valmistajan tunnuksesta voidaan muodostaa myös vakiomittaiselle tuotteelle Tuotekoodi: 640VVVVTTTTTC, jossa V on valmistajan tunnus, T on tuotteen tunnus ja C on tarkiste. Tällainen valmistajan tunnus ei nähtävästi voi olla 00-alkuinen.
Olen nähnyt suomalaisessa tarjouskupongissa myös 26-alkuisen EAN-13 -koodin (2610000002232), jollaisia GS1 Finland ei tunne.

Vain melko harvoissa tapauksissa pitää paikkansa laajalle levinnyt käsitys, jonka mukaan tuotteen hinta on jotenkin sisällytetty Tuotekoodiin. Yleensä koodi on pelkkä tunniste, jonka avulla hinta löytyy tietokannasta. Asia tulee aika selväksi, jos ajatellaan vaikkapa suklaapatukkaa, jota myydään täsmälleen samanlaisessa pakkauksessa ja samalla Tuotekoodilla varustettuna kymmenissä maissa kymmenillä valuutoilla, ja samankin valuutan puitteissa vaihtelevilla hinnoilla.

EAN-13:sta on joissakin maissa käytetty kansallisia nimiä, joihin lukemattomat tekstit Internetissä edelleen viittaavat, vaikka GS1:n dokumentit eivät niitä nykyisin tunne. Esimerkkejä:

  • Japani: Japanese Article Number, JAN, maakoodit 45 ja 49
  • Etelä-Korea: Korean Article Number, KAN-13, maakoodi 880
  • Australia: Australian Product Code, APC, maakoodi 93
Suomessa myytävillä sähkötarvikkeilla on SSTL:n (Suomen sähkötukkuliikkeiden liitto) antama 7-numeroinen sähkönumero, joka muodostuu kolmesta osasta: Kaksinumeroinen tuoteryhmänumero, kolminumeroinen alaryhmänumero ja kaksinumeroinen yksilönumero. Nimikkeitä on reilusti yli 100 000 ja näistä n. 30 %:lla on tavanomainen Tuotekoodi, mutta muille se muodostetaan alkuosasta 64100, sähkönumerosta ja normaalista Tuotekoodin tarkisteesta. Esim: 1602012 → 6410016020123. - Hyvin samantapaiset säännöt koskevat Suomen putkikauppiasyhdistyksen (SPY) LVI-numeropankkiin rekisteröityjä tuotteita, joiden LVI-numero voidaan muuttaa Tuotekoodiksi etuliitteellä 64158.

Kirjoissa EAN-13:n ensimmäiset numerot ovat usein 978, jolloin seuraavat yhdeksän numeroa ovat kirjan ISBN-numero (ISBN-10) ilman ISBN-numeron omaa tarkistemerkkiä. Asia ilmaistaan joskus niin että kirjoilla on maatunnus, joka viittaa Bookland-nimiseen maahan, tai puhutaan Bookland-koodista ("kirjamaatunnus"), johon tyypillisesti kuuluu EAN-2 tai EAN-5 lisäkoodi. Nimi voidaan kirjoittaa myös muodossa Booklan tai BookLan, mutta merkityseroa ei näytä olevan. Joissakin kirjoissa ISBN-numeroa käytetään suoraan Tuotekoodina, mikä näyttäisi olevan vastoin standardia (tarkiste lasketaan tietysti Tuotekoodin säännöillä). Vuodesta 2007 alkaen kirjoissa käytetään myös 9791..9799-alkuisia koodeja, kts. ISBN-13. Lehdissä (ei suomalaisissa, mutta ainakin australialaisissa, englantilaisissa, eteläafrikkalaisissa ja virolaisissa) ensimmäiset numerot ovat 977 ja seuraavat seitsemän numeroa ovat lehden ISSN-numero jälleen ilman tarkistemerkkiä. Seuraavat kaksi numeroa ovat nollia tai sisältävät julkaisun tyypistä riippuvia lisätietoja, esim. hintakoodin. Suomalaisissa lehdissä Tuotekoodi muodostetaan nykyisin Jakelukoodista. 9790-alkuiset koodit taas ovat ISMN-numeroita.

Useiden ulkomaisten lähteiden mukaan eräillä muilla numeroilla alkavia koodeja käytetään seuraaviin erityistarkoituksiin:

980Refund receipts
981..983Common Currency Coupons
99Coupons / In-Store Coupons

980-alkuisesta koodista on vain niukasti tietoja. Näyttää siltä, että sitä käytetään kuiteissa, joita vastaan palautetaan rahaa joistakin ostoksista (esim. pullonpalautuskuitit). Koodin rakenne on maakohtainen, mutta suositus on että positiot 4..8 sisältävät kuitin yksilöivän numeron ja positiot 9..12 palautettavan summan.

Euroalueella 981..983-alkuisissa koodeissa positiot 4..7 yksilöivät alennuskupongin antajan, positiot 8..9 ovat kupongin referenssinumero (esim. tarjouskampanjan tunniste) ja positiot 10..12 ilmoittavat kupongin arvon. 981-alkuisessa koodissa arvo ilmoitetaan kymmeninä sentteinä (maksimi 99,90 €), 982- ja 983-alkuisissa sentteinä (maksimi 9,99 €). Jos tuote on ilmainen, arvo on 000.

980..983-alkuisten koodien käytöstä Suomessa ei ole havaintoja.

99-alkuinen koodi tunnetaan myös nimellä EAN-99, ja Suomessa sitä käytetään ainakin K-kaupparyhmän Plussa-pisteseteleissä (Plussa-kortilla kerätään ostoksista Plussa-pisteitä, ja tietyllä pistemäärällä saa Plussa-pistesetelin, jolla voidaan maksaa ostoksia). Jokaisessa setelissä on ilmeisesti yksilöllinen koodi, jolla ei näytä olevan helposti tunnistettavaa rakennetta. Koodeja on myös Plussa-pistesetelien kanssa käytettävissä tarjouskupongeissa. Muualla maailmassa tällaiset alennuskupongit lienevät yleisempiä. Ruotsissa käytettävissä kupongeissa koodissa voi näkyä kupongin arvo samaan tapaan kuin suomalaisissa 20..22-alkuisissa koodeissa. Yhdysvaltalaiset dokumentit taas kuvaavat aivan erilaisen rakenteen ja hiukan erilaisen käyttötavankin. Ilmeisesti asia määritellään maakohtaisesti.

Tarkistus

Numeerinen Tuotekoodi merkitään viivakoodin alle, mutta myös viivakoodin edessä ja jäljessä on yleensä numeroita, jotka on otettava huomioon. Viimeinen numero on tarkiste. UCC-12:sta se voi joskus puuttua, vaikka se sisältyy viivakoodiin.

Tarkisteen laskenta: Tarkistusnumeron edessä olevia numeroita painotetaan kertoimilla 3, 1, 3, 1 jne. oikealta alkaen. Tulot lasketaan yhteen. Tarkistusnumero on numero, joka summaan on lisättävä jotta tulos olisi tasan jaollinen kymmenellä. Esimerkkejä:

	 6  4  1  0  1  0  7  2  1  0  3  3  4		EAN-13
	 1  3  1  3  1  3  1  3  1  3  1  3		(Suomi)
	 6 12  1  0  1  0  7  6  1  0  3  9  = 46 → 4

	 9  7  8  9  5  2  5  1  5  9  0  0  4		EAN-13
	 1  3  1  3  1  3  1  3  1  3  1  3		(kirja)
	 9 21  8 27  5  6  5  3  5 27  0  0  = 116 → 4

	 5  4  4  9  0  2  4  6				EAN-8
	 3  1  3  1  3  1  3				(Belgia)
	15  4 12  9  0  2 12  = 54 → 6

	 0  5  4  6  5  1  1  9  1  0  9  9		UCC-12
	 3  1  3  1  3  1  3  1  3  1  3
	 0  5 12  6 15  1  3  9  3  0 27  = 81 → 9

	 0  3  3  7  5  9  0  5				UCC-12
							(tiivistetty)

	 0  3  3  0  0  0  0  0  7  5  9  5		Sama ilman
	 3  1  3  1  3  1  3  1  3  1  3		tiivistystä
	 0  3  9  0  0  0  0  0 21  5 27  = 65 → 5
Viimeisessä esimerkissä kannattaa huomata, että tarkisteen laskeminen suoraan tiivistetystä muodosta antaa väärän tuloksen. Tiivistetty koodi voidaan palauttaa alkuperäiseen muotoonsa seuraavasti:
  • Jos viimeinen numero ennen tarkistusnumeroa (z) on 0..2:
    0 xxyyyz c → 0 xxz00 00yyy c
  • Jos viimeinen numero ennen tarkistusnumeroa on 3:
    0 xxxyy3 c → 0 xxx00 000yy c
  • Jos viimeinen numero ennen tarkistusnumeroa on 4:
    0 xxxxy4 c → 0 xxxx0 0000y c
  • Jos viimeinen numero ennen tarkistusnumeroa (z) on 5..9:
    0 xxxxxz c → 0 xxxxx 0000z c
Tarkistusnumero (c) pysyy samana, koska se lasketaan aina tiivistämättömästä versiosta. Tiivistys tehdään samoilla säännöillä kuin yllä, edellyttäen että alkuperäinen koodi vastaa jotakin eo. malleista. Osa numeroavaruudesta on varattu yritysten sisäiseen käyttöön, jolloin muunnosta koskevat säännöt ovat erilaiset. Tiivistettävän koodin ensimmäinen numero voi olla vain 0 tai 1.

Muita tietoja ja lisäkoodeja

EAN-13:n ensimmäinen numero ja UPC-E:n tarkiste eivät sisälly viivakoodiin samalla tavalla kuin muut numerot, vaan ne päätellään siitä, missä järjestyksessä ns. parillisia ja parittomia viivakoodisymboleja on käytetty kuuden ensimmäisen viivakoodiin sisältyvän numeron esittämiseen. UPC-E:n tapauksessa ensimmäinen numero piilotetaan viivakoodiin kuten tarkiste, ja se voi olla 0 tai 1, eli 6 viivakoodisymbolilla esitetään 8 numeroa, jotka sitten laajennetaan 12-numeroiseksi UCC-12 -koodiksi.

Lähinnä painotuotteissa (mutta joskus oluttölkeissäkin) voidaan käyttää varsinaisen EAN-8:n tai EAN-13:n lisäksi 2- tai 5-numeroisia EAN-2 ja EAN-5 -koodeja, joiden tarkisteet lasketaan eri tavoilla kuin EAN-13:n, mutta koska tarkisteita ei tulosteta numeroina, vaan ne piilotetaan viivakoodisymbolien pariteettiin, niiden tarkempia kuvauksia ei ole otettu mukaan (EAN-5:ssä menetelmä on Kerroin 39). Vastaavia lisäkoodeja voidaan käyttää myös UPC-A:n ja UPC-E:n kanssa. Lisäkoodien merkitys vaihtelee. Olen myös nähnyt EAN-5:n erillisenä tarrassa, joka luultavasti sisälsi varashälyttimen.

Viivakoodisymbolien pariteetin käyttöä tiedon tallennukseen voidaan verrata siihen, jos ihmisten luettaviksi tarkoitettuja numeroita kirjoitetaan kahdella eri värillä tai sävyllä, jotka eivät muuta merkkien järjestystä tai numeerisia arvoja, mutta joiden valinnalla voidaan koodata mukaan jokin lisätieto. Esim. viidestä numerosta kaksi on harmaita ja loput mustia, ja näiden vuorottelu välittää jonkin itse numeroiden merkityksestä riippumattoman tiedon. Tässä tapauksessa vaihtoehtoja on kymmenen, mikä sopivasti riittää yhden ylimääräisen numeron esittämiseen:
98024   98024   98024   98024   98024
98024   98024   98024   98024   98024
Yhdistelmien merkitys on tietenkin sopimuksenvarainen. Muualla kuin (Tuotekoodien) viivakoodeissa tällaista tuskin käytännössä tehdään - tässä yritetään vain havainnollistaa periaatetta. (Huom! Ylläolevat numerosarjat voivat tulostua kirjoittimelle täysin mustina, mutta näytöllä niiden pitäisi näkyä oikein.)

Suomalaisissa lehdissä EAN-5:n kaksi ensimmäistä numeroa ovat samat kuin ilmestymisvuoden kaksi viimeistä numeroa (2001 → 01) ja kolmas numero on kaikissa havaituissa tapauksissa nolla (poikkeuksena kuitenkin eräät vuoden 2001 alussa julkaistut lehdet, joissa koodi oli virheellinen). Kaksi viimeistä numeroa ovat viikkonumero jos lehti ilmestyy kerran viikossa tai useammin, muussa tapauksessa lehden numero. Esim. kuukausittain julkaistavan lehden vuoden 1998 viimeisen numeron koodi: 98012.

Tuotekoodit ovat yksilöiviä siinä mielessä, että maailmasta ei pitäisi löytyä samanaikaisesti kahta erilaista myynnissä olevaa tuotetta, joilla on sama valmistajan antama koodi, mutta kun jonkin tuotteen valmistus lopetetaan, sen koodi voidaan antaa toiselle tuotteelle neljän vuoden karenssiajan jälkeen. Vaatteilla karenssiaika on kaksi ja puoli vuotta.

Viivakoodinlukijat ja atk-järjestelmät, jotka on suunniteltu käsittelemään EAN-koodeja, pystyvät useimmiten käsittelemään myös UPC/UCC-koodeja. Lähinnä atk-järjestelmien puutteiden vuoksi tämä ei aikaisemmin ole toisin päin onnistunut, mutta vuoden 2005 alusta alkaen järjestelmien pitäisi olla yhteensopivia molempiin suuntiin.

Yleensä viivakoodin lukeminen edellyttää, että koodin edessä ja jäljessä on alue, jossa ei ole mitään merkintöjä ("quiet zone"). GS1-viivakoodeja käytettäessä numeerisen koodin alussa ja/tai lopussa on joskus < tai > joiden kärki osoittaa mihin saakka tyhjä alue ulottuu.

Tuotekoodi ja "Pedon luku" 666

Tätä tekstiä en olisi halunnut kirjoittaa, mutta katsoin sen välttämättömäksi, kun tämä dokumentti oli aiheeseen yhdistetty eräällä Internetin keskustelupalstalla. Valitettavasti jotkut ovat päättäneet, että tämäkin huuhaa on Yhdysvalloista Suomeen levitettävä, joten yleisen harhaanjohtamisen välttämiseksi jonkun täytyy myös antaa rationaalinen vastine.

Väite: Jokaisen Tuotekoodin viivakoodiesitykseen sisältyy Pedon luku 666. Numeron 6 viivakoodisymboli on kaksi kapeaa mustaa viivaa, ja tämä yhdistelmä löytyy jokaisen viivakoodin alusta, keskeltä ja lopusta. Siis kolme kuutosta.

Lyhyt vastine: Väite ei pidä paikkaansa, vaan perustuu siihen, että viivakoodijärjestelmää ei ole ymmärretty oikein. Useimmat ihmiset eivät tunne viivakoodeja yksityiskohtaisesti, joten virheellinen tieto, jota joku vakavissaan todeksi väittää, on helppo hyväksyä ilman kritiikkiä.

Pitempi vastine menee valitettavasti väistämättä hiukan tekniseksi. Ymmärtämistä helpottaa, jos otat käsille muutaman tällaisen viivakoodin (mieluiten isokokoisia) koska tässä esityksessä ei ole mukana kuvia, paitsi jos seuraat lopussa olevaa linkkiä. Käytän sanoja "musta" ja "valkoinen", jotka useimmiten osuvat kohdalleen, mutta muutkin vaihtoehdot ovat mahdollisia.

Viivakoodien kokoja ei yleensä määritellä absoluuttisesti, vaan käytetään käsitettä "yksikkö" ("unit", "element" tai "module"), jonka leveydelle määritellään ala- ja yläraja. Useimmiten kapein viiva on yhden yksikön levyinen, ja muut tämän kokonaisia monikertoja. EAN-13:ssa ja UPC-A:ssa viivojen leveydet ovat 1, 2, 3 tai 4 yksikköä. Se mitä 666-intoilijat eivät ymmärrä on, että mustien viivojen väliin jäävät valkoiset alueet (tästä eteenpäin valkoiset viivat) ovat aivan yhtä tärkeitä kuin mustatkin. Tämä ymmärryksen puute voi selittyä sillä, että aiheeseen perehtymättömät ihmiset rinnastavat viivakoodin tavalliseen tekstiin, jossa sanaväleillä on merkitystä, mutta niiden täsmällisillä leveyksillä yleensä ei. Viivakoodien maailmassa tällainen talonpoikaisjärki ei toimi. Valkoisten viivojen leveyksille on samat vaihtoehdot kuin mustilla viivoilla.

EAN-13 -viivakoodin alussa, keskellä ja lopussa on kohdistusviivat, jotka yleensä ovat muita pitempiä ja erottuvat siksi helposti. Viivojen pituudella ei kuitenkaan ole merkitystä koodia koneellisesti luettaessa. Kaikki viivakoodijärjestelmät käyttävät kohdistusviivoja tai muita alku- ja loppumerkkejä, joiden perusteella viivakoodinlukija tunnistaa yksikön koon ja käytetyn järjestelmän - useimmat lukijat pystyvät lukemaan kymmeniä eri järjestelmiä ilman, että lukijalle etukäteen kerrotaan minkä järjestelmän viivakoodia on tarkoitus lukea. Koodissa on myös 12 numerosymbolia, kuusi keskimmäisten kohdistusviivojen kummallakin puolella. Numeerisen koodin ensimmäiselle numerolle ei ole omaa viivakoodisymbolia, jonka vuoksi tämä numero sijoitetaan tavallisesti viivakoodin eteen, eikä alle kuten muut numerot.

Kaikki kohdistusviivat ovat yhden yksikön levyisiä. Alussa ja lopussa on kaksi mustaa ja yksi valkoinen viiva, siis yhteensä kolme yksikköä kummassakin päässä. Keskellä on kolme valkoista ja kaksi mustaa viivaa, yhteensä viisi yksikköä. Jokainen numerosymboli muodostuu kahdesta mustasta ja kahdesta valkoisesta viivasta, joiden yhteinen leveys on seitsemän yksikköä. Koodin vasemmalla puolella jokainen numerosymboli alkaa (vasemmalta oikealle edettäessä) valkoisella viivalla, oikealla puolella taas mustalla.

Numeron 6 ja kohdistusviivojen samanlaisuus on näköharha, joka perustuu siihen, että valkoisia viivoja ei ymmärretä symbolien merkityksellisiksi osiksi, ehkä siksi että tavallisessa tekstissä kirjainten ja sanojen väliin jäävien tyhjien alueiden leveys ei yleensä vaikuta tekstin merkitykseen. Todellisuudessa numeron 6 symboli muodostuu kahdesta yhden yksikön levyisestä mustasta viivasta, yhdestä yhden yksikön levyisestä valkoisesta viivasta ja yhdestä neljän yksikön levyisestä valkoisesta viivasta, eikä siis seitsemän yksikön levyisenä voi mitenkään olla sama asia kuin kolmesta tai viidestä yksiköstä muodostuvat kohdistusmerkit. Jos huomio kohdistetaan vain valkoisiin viivoihin, havaitaan että jokaisessa numerosymbolissa on kaksi valkoista viivaa, kun taas kohdistusmerkeissä niitä on yksi tai kolme. Eli ei mitään yhdennäköisyyttä. Lisäksi voidaan todeta, että koodin vasemmalla puolella kuutosen symboli voi esiintyä myös muodossa, jossa musta ja valkoinen ovat vaihtaneet paikkaa. Suomalaisessa 64-alkuisessa koodissa tämä voi tapahtua niissä kahdessa positiossa, jotka ovat lähinnä keskimmäisiä kohdistusviivoja. UPC-A -koodin vasemmalla puolella käytetään vain tätä muotoa, minkä 666-intoilijat poikkeuksetta jättävät vaille huomiota, koska heille ei sovi sellainen todellisuus, joka liian selvästi poikkeaa heidän teoriastaan.

Johtopäätös: Viivakoodin kohdistusviivat eivät sisällä lukua 666.

Silti on väitetty, että viivakoodin suunnittelijat olisivat tahallisesti valinneet numerolle 6 symbolin, joka "muistuttaa" kohdistusviivoja. Oman käsitykseni mukaan he tiesivät mikä on kohdistusviivojen rakenne ja mitä ne tarkoittavat (eli niillä ei ole varsinaista tietosisältöä), eikä heille tullut mieleen että joku alkaisi tulkita niitä joksikin mitä ne eivät ole. Numerosymbolit ja kohdistusviivat eivät edes muistuta toisiaan, kun koodia luetaan oikein.

Myös on esitetty, että kohdistusviivat vastaisivat esim. A-kirjaimia. Tuskin väite suoranaisesti väärä on, muttei se ole myöskään yleispätevä totuus: Kun viivakoodeja tuotetaan jollakin ohjelmalla tai viivakoodifonttia käyttäen, kohdistusviivojen paikka suhteessa numerosarjaan voidaan joutua osoittamaan jotenkin, ja silloin niitä voi edustaa vaikkapa jokin kirjain. Valmiin viivakoodin tietosisältönä on kuitenkin pelkkiä numeroita. Viivakoodinlukija ei siitä kirjaimia löydä. Tämä siis koskee nimenomaan EAN-13:a ja UPC-A:ta - tietysti on olemassa muita viivakoodijärjestelmiä, joilla voidaan esittää myös kirjaimia.

Jos kohdistusviivat sittenkin välttämättä halutaan tulkita väärin, osaisiko joku kertoa mistä alkaen jokin luku on muodostunut kolmesta erillisestä numerosta, joiden välissä on muita numeroita? Tällä periaatteella minkä tahansa kolminumeroisen luvun löytää mm. lukemattomista puhelinnumeroista (vaikkapa 626 3465). Tiedän kyllä taistelevani tuulimyllyjä vastaan, koska niihin jotka haluavat uskoa huuhaa-juttuja ei mikään logiikka tai järki vaikuta.

Jostakin syystä Pedon luvun etsijät unohtavat mainita, etteivät he pysty uskottelemaan edes itselleen, että 666 olisi löydettävissä UPC-E:stä, vaikka sen "pitäisi" löytyä "kaikista" viivakoodeista.

Ilman väärää vaatimattomuutta uskallan väittää tuntevani tämän asian paremmin kuin 95 % niistä ihmisistä, jotka uskovat siitä jotakin tietävänsä. Väite perustuu siihen, että olen kirjoittanut ohjelmapaketin, joka tuottaa EAN-13 -viivakoodeja käyttämättä mitään valmista viivakoodifonttia (eli tein "fontin" itse). Tätä tehdessäni sain perehtyä asiaan pikselin tarkkuudella. Kokeile vapaasti. Kaikissa testeissäni ohjelma on tuottanut virheettömän viivakoodin. Viivakoodi tuotetaan vain EAN-13:lle, vaikka ohjelma osaa tarkistaa muitakin. Koodi saattaa olla epäterävä LCD-näytöllä, jos resoluutio on asetettu ko. näytön optimista poikkeavaksi. JavaScript-tuki on välttämätön.

666-vouhotuksella on yksi yhteinen piirre lähes kaikkien muiden salaliittoteorioiden kanssa: Salaliittolaiset oletetaan niin tyhmiksi, että kuka tahansa asiaa edes pintapuolisesti "tutkinut" pystyy heidän toimensa "paljastamaan", eivätkä salaliittolaiset ilmeisesti edes opi virheistään mitään, vaan samat henkilöt (varsinkin Yhdysvaltain liittovaltio) "jäävät kiinni" kerran toisensa jälkeen. Eiköhän ole niin, että useimmat todelliset salaliitot todella pysyvät salassa, ainakin niin kauan kuin niillä on merkitystä. Kaikki edelläsanottu siis tietysti sen lisäksi, että itse "Pedon luku" on alun perinkin silkkaa pötyä.

ISMN-numero

ISMN (International Standard Music Number) on painetuissa musiikkijulkaisuissa - esim. nuoteissa (nuottilehdissä) tai nuotteja sisältävissä kirjoissa - käytettävä tunniste. Standardi on vuodelta 1993, joten tätä vanhemmista julkaisuista numeroa ei kannata etsiä. (Minulle on vakuutettu, että nuottilehden yksittäinen painos voi olla myynnissä vuosikymmeniä, ja käytössä vieläkin pitempään, joten vanhempiakin nuotteja käytetään laajalti.)

Ennen vuotta 2008 käyttöön otetut ISMN-numerot muistuttavat rakenteeltaan ISBN-numeroa, mutta maa/kielialuetunnuksen tilalla on iso M-kirjain. Tätä seuraavat julkaisijan (3..7 numeroa) ja julkaisun (5..1 numeroa) tunnisteet, joiden yhteinen pituus on aina kahdeksan numeroa. Viimeisenä on tarkistenumero.

Vuoden 2008 aikana ISMN-numerot muuttuivat samaan tapaan kuin ISBN-numerot muuttuivat vuoden 2007 alussa (vrt. ISBN-13): Tunnisteen alkuun lisättiin 979 ja M-kirjain korvattiin nollalla. ISBN-numeroista poiketen tarkiste pysyy ennallaan. Standardi tuli voimaan 01.01.2008, mutta siirtymäaikaa oli vuoden loppuun.

Tarkisteen laskenta vastaa Tuotekoodin tarkisteen laskentaa. Vanhoissa tunnisteissa M-kirjaimelle käytetään arvoa 3. Esimerkki:

ISMN M-2018-9185-9

	M  2  0  1  8  9  1  8  5  9
	3  1  3  1  3  1  3  1  3
	9  2  0  1 24  9  3  8 15 = 71 → 9
Sama tunnus uudessa muodossa: ISMN 979-0-2018-9185-9
	9  7  9  0  2  0  1  8  9  1  8  5  9
	1  3  1  3  1  3  1  3  1  3  1  3
	9 21  9  0  2  0  1 24  9  3  8 15 = 101 → 9
Vastaava EAN-13 -Tuotekoodi: 9 790201 891859. Vanhan ISMN-numeron ja siitä johdetun Tuotekoodin tarkisteet ovat aina samat. Tämä seuraa toisaalta siitä että laskentamenetelmä on sama, toisaalta tavasta jolla Tuotekoodi ISMN:stä muodostetaan. Uusi ISMN on sisällöltään sama kuin vastaava Tuotekoodi, vaikka numeroiden ryhmittelyssä voi olla eroa. Huomaa että jos etuliitettä 979 seuraa muu numero kuin 0, kyseessä ei ole ISMN vaan ISBN-13.

ISBN-13

ISBN-13:n tarkistusohjelma

ISBN = International Standard Book Number. ISBN-numeroa käytetään tunnisteena monissa julkaisuissa, kuten kirjoissa, kartoissa ja CD-ROM:eissa. Vanhat ISBN-numerot loppuivat epätaloudellisen jakotavan vuoksi eräiltä osin kesken ennen vuotta 2010. Toukokuussa 2005 julkaistun uuden standardin mukaan ISBN-13 korvasi ISBN:n tietojärjestelmissä viimeistään 01.01.2007. Julkaisuissa uudenmallisia numeroita on voitu ottaa käyttöön jo aikaisemmin. Siirtymävaiheessa molempia käytetään rinnakkain. Suomessa ISBN-numeroita myöntää Kansalliskirjaston (entinen Helsingin yliopiston kirjasto) yhteydessä toimiva Suomen ISBN-keskus.

Koodi pitenee 10:stä 13 numeroon siten, että kaikkiin vanhoihin numeroihin lisätään etuliite 978 (sama jolla ISBN-numerosta on saatu Tuotekoodi). Samaa etuliitettä käytetään myös uusissa julkaisuissa niin pitkään kuin vanhan järjestelmän numeroita riittää käytettäviksi, eli joissakin tapauksissa kauan. Näiden rinnalle on otettu käyttöön etuliite 979; tällaiset koodit jaetaan entistä talodellisemmin (eli pienempinä lohkoina), jotta koodien loppuminen ei kovin pian toistuisi. Käytettävissä oleva koodiavaruus kasvaa siis kaksinkertaiseksi - melkein muttei aivan, koska 1/10 tästä uudesta alueesta on jo varattu ISMN-numeroille (9790-alkuiset koodit). Tarkiste lasketaan kuten Tuotekoodeissa, joten sekä olemassaolevien että tulevien julkaisujen ISBN-13 on (lähes aina) sama kuin niiden EAN-13 -koodi. Tämä muutos on tilapäisratkaisu; lisää muutoksia - esim. uusia etuliitteitä - tulee joskus myöhemmin.

Tunniste voidaan jakaa väliviivoilla viiteen osaan, joista kolme keskimmäistä ovat samat kuin vanhoissa ISBN-numeroissa.

  1. Etuliite 978 tai 979
  2. Maa tai kielialue
  3. Kustantaja
  4. Nimike
  5. Tarkiste
Kolminumeroinen etuliite ja viimeisenä oleva yksinumeroinen tarkiste ovat aina omina ryhminään, mutta muuten ryhmien koot eivät ole kiinteät, vaikka numeroiden kokonaismäärä on vakio. Tarkisteen laskennassa otetaan huomioon vain numerot, joten ryhmittely ei siihen vaikuta. 979-alkuisten tunnisteiden maa- / kielialue- ja kustantajakoodit eivät yleensä ole samoja kuin 978-alkuisten tunnisteiden vastaavat koodit. Erityisesti 979-alkuisen tunnisteen maa- / kielialuekoodi ei voi alkaa 0:lla.

Esimerkki (Isaac Asimov, Asimov's New Guide to Science, Penguin Books 1987):

	Vanha ISBN-numero: 0-14-007621-2
	Uusi ISBN-13:  978-0-14-007621-9

	9  7  8  0  1  4  0  0  7  6  2  1  9
	1  3  1  3  1  3  1  3  1  3  1  3
	9 21  8  0  1 12  0  0  7 18  2  3  = 81 → = 9
Vastaava Tuotekoodi (EAN-13 / Bookland) on 9 780140 076219.

ISMN-numero ja ISWC-koodi ovat rinnakkaisia järjestelmiä, mutta jälkimmäisen tarkiste lasketaan eri tavalla.


Kerroin 137

Menetelmää käytetään pankkisiirron viitenumerossa, henkilökortin numerossa ja verolipun numerossa.

Menetelmä tunnetaan nimellä IBM Check, mutta samaa nimeä käytetään myös Luhnin moduli 10:stä.

Pankkisiirron viitenumero

Tarkisteen lisäys- ja tarkistusohjelma
Viitenumeroiden generointiohjelma

Viitenumeron sisällön määrittelee yleensä laskun lähettäjä, joka numeron perusteella pystyy yhdistämään lähetetyn laskun ja vastaanotetun maksun. Viitenumerot otettiin Suomessa käyttöön 1979.

Viitenumerosta on usein löydettävissä esim. jäsennumero, asiakasnumero ja/tai laskun numero. Tällaisten tietojen yhdistelmät pidentävät numerosarjaa täysin tarpeettomasti. Erityisenä älyttömyytenä voidaan pitää numerosarjan alussa olevia nollia, jotka ovat hyviä ehdokkaita maailman turhimmaksi asiaksi. Viitenumeron tarkoitus on maksusuorituksen yksilöinti, ja tähän riittää yleensä muutama numero. Finanssialan keskusliiton mukaan "näppäilyvirheiden välttämiseksi viitenumeron tulee olla lyhyt". On myönnettävä, että redundanssi voi helpottaa virheellisellä viitenumerolla saapuneen maksun kohdistamista oikeaan laskuun, mutta onko tästä saatava hyöty niin suuri, että sen takia kannattaa samalla lisätä virhemahdollisuuksia? Vrt. Tarkistettavan tiedon pituus.

Viitenumerossa on 4..20 numeromerkkiä. Pituutta laskettaessa ei oteta huomioon etunollia, joita ei pitäisi ollakaan. Viimeinen numero on tarkiste, muut saa valita vapaasti. Lyhyt juokseva numero on hyvä valinta. Numerosarja ryhmitellään viiden numeron ryhmiin oikealta tai vasemmalta alkaen. Lähde: Suomen pankkiyhdistys (vuoden 2007 alusta Finanssialan keskusliitto), Tilisiirto-opas, 20.03.2002. Laskenta:

  1. Tarkistetta edeltäviä numeroita painotetaan oikealta alkaen kertoimilla 7, 3, 1, 7, 3, 1 jne.
  2. Tulot lasketaan yhteen.
  3. Tarkistusnumero on numero, joka summaan on lisättävä jotta tulos olisi tasan jaollinen kymmenellä.
Esimerkki: 61 74354

	6  1   7  4  3  5  4
	1  3   7  1  3  7
	6  3  49  4  9 35  = 106 → 4
Tulojen viimeisten numeroiden yhteenlaskeminen antaa saman tarkistusnumeron.

Viitteellisten maksujen vastaanottaminen on yrityksille ja yhteisöille halvempaa kuin viitteettömien, joten viitenumeroa kannattaa käyttää vaikkei sitä lainkaan tarvittaisi maksun yksilöintiin. Tällaiseen käyttöön sopivia vakioviitteitä ovat esim. 1313, 2121, 4242 ja 5555.

Viitenumero on englanniksi "reference number" tai "(Finnish domestic) creditor reference". Tätä tietoa etsivät yllättävän monet, vaikka sille pitäisi olla käyttöä vain harvoin, koska suomalaista viitenumeroa ei käytetä kansainvälisessä maksuliikenteessä, jossa viitenumeron lähin vastine on 01.12.2010 alkaen RF-viite ja aikaisemmin IPI:n maksunaihekoodi. Ainoa käyttötarkoitus jonka tälle käännökselle keksin, on suomalaisten käytäntöjen selittäminen täällä asuville ulkomaalaisille – jos tiedät jonkin muun, ole hyvä ja kerro minullekin.

Koska on vaikea kuvitella, että pankit loputtomasti ylläpitäisivät rinnakkaisia järjestelmiä, on todennäköistä että kotimaisista viitenumeroista luovutaan joskus 31.01.2014 jälkeen kokonaan, ja käyttöön jäävät vain RF-viitteet. Uudet sovellukset kannattaa suunnitella tämän mukaisesti.

Suomen Osto- ja Logistiikkayhdistys LOGY ry on ottanut saman tarkistusmenetelmän käyttöön 12-numeroisissa rahtikirjanumeroissaan. Samaa tarkistusta käytetään myös pankkitilien numeroissa ainakin Virossa ja shekkien 9-numeroisissa reitityskoodeissa Yhdysvalloissa.

Henkilökortin numero

Pankkisiirron viitenumerossa käytettävä Kerroin 137 -menetelmä sopii myös seitsemän tutkitun suomalaisen henkilökortin numeroihin (kaksi vuoden 1999 maaliskuussa käyttöön otettua mallia, yksi vanhempi ja neljä sirukorttia vuosilta 2004 ja 2006). Lehdissä ja muualla julkaistuissa korttien kuvissa numero yleensä puuttuu, on lukukelvoton, sisältää vain nollia tai on muuten ilmeisen keinotekoinen (esim. 000000033) tai manipuloitu, mutta havaituissa jäljellejäävissä tapauksissa (6 kpl) toimii sama tarkistusmenetelmä. Lisäksi yksi henkilö on ilmoittanut saman tarkistuksen sopivan oman korttinsa numeroon. Tarkistuksen sopiminen näihin numeroihin voi olla pelkkä sattuma, mutta oman mielivaltaisen tulkintani mukaan sattuman todennäköisyys on vain yksi yli 30 miljardista.

Esimerkki (sirukortti, Keskisuomalainen nro 156 07.06.2006 sivu 8):

	 5  0  3  2  2  7  8  1  4
	 3  7  1  3  7  1  3  7
	15  0  3  6 14  7 24  7  = 76 → 4
Tätä tarkistusmenettelyä ei käytetä passien numeroissa, eikä se välttämättä ole kansainvälinen standardi henkilökorteissakaan. Muista uuden mallin mukaisessa henkilökortissa olevista tarkisteista on lisätietoja matkustusasiakirjojen yhteydessä.

Verolipun numero

Tämä kuvaus ei perustu mihinkään julkaistuun dokumenttiin, vaan vain kolmeen tutkittuun verolippuun, jotka kaikki liittyvät dieselveron maksamiseen. Verolipun numeron ja vastaavan pankkisiirron viitenumeron välinen yhteys on kuitenkin niin ilmeinen, että näinkin pienen aineiston perusteella asiaa voidaan pitää käytännössä todistettuna. Tällä hetkellä ei ole tiedossa, käytetäänkö samaa tarkistusta esim. ennakkoverolipun numerossa, mutta tätä tarkistusta ei käytetä sellaisessa verolipussa, jolla ilmoitetaan veronpalautuksesta tai maksettavasta jäännösverosta.

Dieselverolipun numeroon sisältyy auton rekisterinumero, jonka kirjaimet korvataan tarkisteen laskentaa varten numeroilla seuraavan taulukon mukaisesti:

A 11B 12C 13D 14E 15F 16 G 17H 18I 19J 20K 21L 22 M 23
N 24O 25P 26Q 27R 28S 29 T 30U 31V 32W 33X 34Y 35 Z 36
Taulukko on lähes sama kuin passien kohdalla, mutta kunkin kirjaimen numero on yhden yksikön suurempi. Avoimeksi jää kuitenkin skandimerkkien käsittely. Niiden numerot saattavat olla: Å = 37, Ä = 38 ja Ö = 39. Täsmälleen samalla korvauksella verolipun numerosta saadaan pankkisiirron viitenumero, sillä molempien tarkisteet lasketaan samalla tavalla. Esimerkki (keksitty): 23413VGA2561-8
	2  3  4  1  3     V     G     A  2  5  6  1 - 8
	               3  2  1  7  1  1
	1  3  7  1  3  7  1  3  7  1  3  7  1  3  7
	2  9 28  1  9 21  2  3 49  1  3 14  5 18  7 = 172 → 8

Rekisterinumero on siis VGA-256. Vastaava viitenumero on 2 34133 21711 25618.


Matkustusasiakirjat

Matkustusasiakirjoja ovat Passi, Viisumi ja Henkilökortti. Kaikissa käytetään samaa standardoitua menettelyä tarkisteiden laskemiseksi.

Huom! Kansainvälisten standardien normaaliin tapaan tässä kuvatut käytännöt ovat vain suosituksia, eli valtiot voivat vapaasti myöntää standardeista poikkeavia matkustusasiakirjoja. Esim. mikään näkemäni viisumi ei ainakaan kaikilta osin vastaa tätä kuvausta. Lisäksi standardi tässä muodossaan koskee vain passiin liimattavia viisumeita, ei leimoja, erillisiä papereita tai muovikortteja.

Allamainittava matkustusasiakirjan tyyppi tarkoittaa kahta merkkiä ensimmäisen optisesti luettavan rivin alussa. Ensimmäinen merkki on P = Passi, V = Viisumi tai I = Henkilökortti. Toinen merkki voi kertoa asiakirjan tarkemman tyypin - esim. passi voi olla diplomaattipassi (PD) tai viisumiin voi sisältyä työlupa - mutta yleensä tässä kohdassa on välimerkki.

On esitetty että paljastan tässä tietoja, joiden perusteella olisi mahdollista väärentää matkustusasiakirjoja. Ajatus on melko lapsellinen, sillä nämä tiedot löytyvät julkisista dokumenteista, joita kuka tahansa voi tilata nimellistä maksua vastaan, eikä tässä kuvata edes kaikkia julkisesti kerrottuja tai ao. asiakirjoista nähtävissä olevia turvatekijöitä, joiden lisäksi on varmasti olemassa myös salaisia tai hyvin vaikeasti havaittavia väärentämistä vaikeuttavia ominaisuuksia.

Passi

Viimeistään vuodesta 1987 alkaen Suomessa myönnetyissä passeissa (paitsi ns. pikapasseissa) on ollut henkilötietosivulla kaksi riviä, jotka on tarkoitettu tietokoneen luettaviksi, mutta jotka ovat myös ihmisen luettavissa. Rivien muoto on määritelty ICAO:n (International Civil Aviation Organization - Kansainvälinen siviili-ilmailujärjestö) dokumentissa 9303 osa 1.

Biometrisellä tunnisteella varustetuista passeista on joitakin lisätietoja omassa kappaleessaan.

Ensimmäisellä rivillä ilmoitetaan matkustusasiakirjan tyyppi (tavallisesti "P<"), myöntäjä (Suomessa "FIN") ja haltijan nimi. Näiden muoto on tarkoin määritelty, mutta niihin ei liity tarkisteita.

Toisen rivin malli:

	NNNNNNNN<TKKKAAAAAATSVVVVVVTHHHHHH<HHHH<<<TT
	----+----1----+----2----+----3----+----4----
1..9 Passin numero (N). Jos numero ei täytä koko kenttää, se tasataan vasempaan reunaan, ja kentän loppu täytetään välimerkeillä, joka on tässä ja muissakin paikoissa "<". (Vasempaan reunaan tasauksesta on se erikoinen seuraus, että tarkisteen laskennan kannalta numeron alussa olevat nollat ovat merkitseviä, mutta lopussa olevat eivät.)
10 Passin numeron tarkiste (T).
11..13 Passin haltijan kansalaisuus (K). Suomen kansalaisilla "FIN".
14..19 Passin haltijan syntymäaika (A), vuosi (kahdella numerolla), kuukausi ja päivä.
20 Syntymäajan tarkiste (T).
21 Passin haltijan sukupuoli (S), "M" = Male, "F" = Female.
22..27 Passin viimeinen voimassaolopäivä (V). Kuten syntymäaika.
28 Viimeisen voimassaolopäivän tarkiste (T).
29..42 Passin haltijan henkilökohtainen tunniste, jonka kukin maa voi määritellä itse. Suomessa suomalainen henkilötunnus (H), jossa "-" tai "+" on korvattu välimerkillä, joilla on myös täytetty kentän loppuosa. 2000-luvulla syntyneiden henkilötunnuksessa syntymäajan ja yksilönumeron välissä oleva A-kirjain tulostuu sellaisenaan positioon 35. Joissakin maissa koko kenttä täytetään välimerkeillä, jolloin myös kentän tarkiste on välimerkki tai nolla.
43 Henkilökohtaisen tunnisteen tarkiste (T). Tätä ei pidä sekoittaa positiossa 39 olevaan tarkisteeseen, joka sisältyy itse henkilötunnukseen ja joka on riippumaton passeja koskevasta standardista.
44 Passin numerosta, haltijan syntymäajasta, passin viimeisestä voimassaolopäivästä, henkilökohtaisesta tunnisteesta ja näiden tarkisteista laskettu tarkiste (T).

Tarkisteiden laskenta: Tarkistettavia numeroita painotetaan vasemmalta alkaen kertoimilla 7, 3, 1, 7, 3, 1 jne.. Kirjaimille käytetään numeerisia arvoja 10..35 seuraavasti:

A 10B 11C 12D 13E 14F 15 G 16H 17I 18J 19K 20L 21 M 22
N 23O 24P 25Q 26R 27S 28 T 29U 30V 31W 32X 33Y 34 Z 35
Tarkisteen laskennassa välimerkki katsotaan nollaksi. Tulot lasketaan yhteen ja summa jaetaan kymmenellä. Jakojäännös on tarkiste (= summan viimeinen numero).

Esimerkki. Tilan säästämiseksi tuloista on merkitty näkyviin vain viimeinen numero; vain sillä on merkitystä tarkisteen kannalta.

Yksittäisten kenttien tarkisteet:

	13846165<8FIN6506157F0110174150665<076R<<<78
	731731731    731731  731731 73173173173173
	798881250    250235  031037 75028500721000
	=48→8        =17→7   =14→4  =37→7
Koko rivin tarkiste:

	13846165<8FIN6506157F0110174150665<076R<<<78
	7317317317   3173173 1731731731731731731731
	7988812506   8508151 0730714750285007210007 =148→8
Elokuun 2005 ja maaliskuun 2006 välisenä aikana uusien passien takakanteen on ilmestynyt viivakoodi, joka on tyyppiä "Lomitettu 2/5" (Interleaved 2 of 5 = I25 = ITF), ja joka sisältää passin numeron sekä tarkisteen, jonka ko. viivakoodistandardin mukainen lasketamenetelmä on Moduli 10. Minun passissani sekä viivakoodin että numerosarjan alussa on etunolla, jota tarvitaan väistämättä siksi, että ko. viivakoodilla esitettävien numeroiden lukumäärän on aina oltava parillinen, mutta etunolla voi liittyä myös siihen, että passin numero voi standardin mukaan olla enintään 9-numeroinen. Viivakoodilla ei ole mitään tekemistä sen kanssa, onko passi koneellisesti luettava, vaan tämä asia riippuu yksinomaan tunnistetietosivulla olevista koneellisesti luettavista tekstiriveistä (takakannen viivakoodi ei edes näy, jos passissa käytetään erillisiä kansia).

ICAO:n dokumentissa mainitaan, että väärentäjät tekevät usein virheitä passien tarkisteiden laskemisessa. Tämä on yllättävää; sekä virheiden tekeminen että sen kertominen julkisesti.

Biometrisellä tunnisteella varustettu passi

21.08.2006 alkaen Suomessa myönnettävät passit sisältävät biometrisen tunnisteen. Julkisuudessa ja myös tässä dokumentissa aikaisemmin esitettyjen tietojen mukaan olisi tapahtunut useita muitakin muutoksia, mutta todellisuudessa muutokset näyttävät olevan vähäisiä:
  • Passin numero sisältää kirjaimia. Tämän on standardi ennenkin sallinut, mutta suomalaisissa passeissa niitä ei ole käytetty.
  • Takakannessa ollut tarra, jossa oli passin numero viivakoodina, on hävinnyt (käytetty viivakoodijärjestelmä ei salli kirjaimia, ja koneellisesti passin ulkopuolelta luettavissa oleva passin numero olisi turvallisuusriski).
Alemmalla koneellisesti luettavalla rivillä olevista tiedoista (passin numero, syntymäaika, passin viimeinen voimassaolopäivä) muodostetaan salausavain, jota käyttäen lukulaite voi keskustella radioaalloilla passissa olevan RFID-sirun kanssa siten, etteivät ulkopuoliset pääse kaappaamaan passin tietoja - näin teoriassa, mutta käytännössä on todistettu että suljetunkin passin tiedot voidaan lukea vähintään useiden metrien päästä, ellei passin suojana käytetä kansia, joissa on metallifolio. Passin pitäminen taskussa tai laukussa ei vaikuta asiaan. Foliosta huolimatta ulkopuolisetkin voivat päästä tietoihin käsiksi kun passi avataan. EU on tehnyt henkilötietovarkaudet helpoiksi.

Viisumi

Sama dokumentti (ICAO 9303), joka määrittelee kansainvälisen standardin passille, määrittelee sellaisen myös viisumille (osa 2). Niissäkin on kaksi koneellisesti luettavaa riviä, joiden muoto poikkeaa vain vähän passeissa käytettävistä. Tarkisteiden kannalta ainoa oleellinen ero on se, että toisen rivin positiot 29..44 ovat viisumin myöntäjän määriteltävissä, joten niihin ei liity standardissa määriteltyjä tarkisteita.

Henkilökortti

Maaliskuusta 1999 alkaen Suomessa Suomen kansalaiselle annettava henkilökortti kelpaa passin vaihtoehtona Euroopan Unionissa ja muutamassa muussa maassa. Kansainvälinen henkilökorttistandardi on määritelty samassa dokumentissa (ICAO 9303), joka määrittelee standardin passeille (osa 3). Standardin tämä osa ei ole ollut kirjoittajan käytettävissä, vaan kuvaus perustuu viiteen tutkittuun suomalaiseen henkilökorttiin (plus kuviin näytekorteista) ja passeja koskevien tietojen soveltamiseen. Henkilökortin numerosta on lisätietoja kohdassa Kerroin 137.

Henkilökortin koneellisesti luettavassa osassa takana alhaalla on kolme riviä ą 30 merkkiä. Alimmalla rivillä on kortin haltijan nimi samassa muodossa kuin passissa, eikä tällä rivillä ole tarkisteita.

Ensimmäisen rivin malli:

	KKMMMNNNNNNNNNT<<<<<<<<<<<<<<<
	----+----1----+----2----+----3
1..2 Matkustusasiakirjan tyyppi, tavallisesti "I<" (K).
3..5 Kortin myöntäjä. Suomalaisessa kortissa "FIN" (M).
6..14 Kortin numero (N).
15 Kortin numeron tarkiste (T). Tämä ei ole sama kuin kortin numeroon sisältyvä tarkiste, joka on positiossa 14 ja joka löytyy myös kortin toiselta puolelta.
16..30 Välimerkkejä. Kuten passissa.

Toisen rivin malli:

	AAAAAATSVVVVVVTKKK<<<<<<<<<<<T
	----+----1----+----2----+----3
1..6 Kortin haltijan syntymäaika (A), vuosi (kahdella numerolla), kuukausi ja päivä.
7 Syntymäajan tarkiste (T).
8 Kortin haltijan sukupuoli (S), "M" = Male, "F" = Female.
9..14 Kortin viimeinen voimassaolopäivä (V) eli "Parasta ennen" -päiväys. Kuten syntymäaika. Uuteen korttimalliin on tehty muitakin parannuksia, mutta tämän tiedon puuttuminen on se syy, jonka vuoksi aikaisemmat kortit eivät kelvanneet matkustukseen muualla kuin Pohjoismaissa. Vanhat kortit olivat voimassa vuoden 2002 loppuun saakka (laki 829/1999).
15 Viimeisen voimassaolopäivän tarkiste (T).
16..18 Kortin haltijan kansalaisuus (K). Suomen kansalaisilla "FIN".
19..29 Välimerkkejä.
30 Kortin numerosta, haltijan syntymäajasta, kortin viimeisestä voimassaolopäivästä ja näiden tarkisteista laskettu tarkiste (T).

Yksittäisten kenttien tarkisteet lasketaan aivan samoin kuin passissa. Kenttien yhteinen tarkiste lasketaan myös samalla tavalla, mutta on otettava huomioon että painokertoimien sarja jatkuu katkottomana ensimmäiseltä riviltä toiselle. Esimerkki kenttien yhteisestä tarkisteesta:

	I<FIN2001064876<<<<<<<<<<<<<<<
	     7317317317317317317317317
	     4007068472 = 38

	7208207F0905046FIN<<<<<<<<<<<4
	3173173 1731731
	1204201 0305026 = 26 + 38 = 64 → 4
Standardi määrittelee kaksi eri kokoista henkilökorttia. Suomessa annettavat ovat luultavasti pienempää mallia. Henkilökortin ja Kela-kortin yhdistelmässä on viivakoodi, mutta se ei liity kortin käyttöön matkustusasiakirjana, vaan käyttöön Kela-korttina. Kortin koneellinen luettavuus seuraa edelläkuvatuista tekstiriveistä, ei viivakoodista.

Henkilöllisyyden todentamisesta

Henkilöllisyytensä voi todistaa millä tahansa minkä kysyjä hyväksyy. Olen lukemattomia kertoja tehnyt tämän työnantajalta saadulla henkilökortilla. Englannissa kelpaa kuulemma vaikka kaasulasku.

Joillakin ihmisillä on kuitenkin luja usko siihen, että on olemassa virallinen luettelo dokumenteista, joilla henkilöllisyyden voi todentaa. Katsotaan ensin sanakirjasta, mitä tarkoittaa "virallinen", ja havaitaan sen olevan oleellisesti sama kuin "säädökseen perustuva". Säädöksiä ovat lait ja asetukset. Minä en kuitenkaan tuollaista yleispätevää luetteloa säädöskokoelmasta löydä, vaikka henkilöllisyyden todentaminen mainitaan useassa kohdassa. Jotakin sentään löytyy:

Väestötietoasetukseen (22.10.1993/886) tehdyn muutoksen (26.11.1999/1064, 34§) mukaan henkilöllisyys voidaan todeta "voimassa olevasta kotimaisesta poliisin myöntämästä passista tai henkilökortista taikka 1 päivänä lokakuuta 1990 tai sen jälkeen annetusta ajokortista".

Valtioneuvoston asetus 707/2006 sanoo muuten saman asian (monimutkaisemmin), mutta ajokorttia ei mainita. Nuo molemmat määritelmät on tarkoitettu käytettäviksi tietyissä erityistilanteissa, mutta niin kauan kun yleisempää määritelmää ei ole, Väestötietoasetuksessa mainittua voi mielestäni pitää virallisimpana mitä löytyy.

Ennen tuota vuoden 1999 asetusmuutosta henkilökortti (ja sitä ennen henkilöllisyystodistus) oli ainoa dokumentti, jolla henkilöllisyys voitiin virallisesti todentaa, koska vain sitä koskevassa säädöksessä tällainen käyttötarkoitus mainittiin. Ajokortti on Ajokorttiasetuksen mukaan vain todistus ajo-oikeudesta, passi taas Passilain mukaan todistus oikeudesta matkustaa ulkomaille. Vaikka passia ja ajokorttia tuollonkin yleisesti käytettiin henkilöllisyystodistuksina, tämä ei perustunut mihinkään säädökseen.

Se jolla on parempaa tietoa kertokoon minullekin.


Kerroin 12

Tätä menetelmää käytetään hiukan erilaisina versioina PallasProssa ja UPS:n seurantanumerossa.

Kirjaston kortti tai kirja (PallasPro)

PallasPro on kirjastojen tietojärjestelmä, jonka puitteissa tuotetaan mm. asiakaskortteja (kirjastokortteja) sekä kirjoihin liimattavia nidetarroja. Tämä kuvaus perustuu yhteen Internetistä löytämääni lyhyeen dokumenttiin, jonka tiedot on päivätty lokakuussa 2005, sekä kirjaston kirjoista ja muutamista korteista tehtyihin havaintoihin, jotka eivät ole täysin yhteensopivia dokumentin kanssa. PallaPro-järjestelmää käyttävien kirjastojen kirjastokorteissa ja kirjojen nidetarroissa käytetään tunnuksia, joiden muoto on KKK L SSSSSSS T jossa:
  • KKK: Kuntanumero
  • L: A = Asiakas (kirjastokortti), N = Nide (kirjan tarra)
  • SSSSSSS: Yksilöivä numero
  • T: Tarkiste, lasketaan vain yksilöivästä numerosta
Todellisuudessa kaikissa (oletettavasti vanhemmissa) korteissa ja kirjoissa ei käytetä tarkistetta, ja yksilöivä numero voi olla lyhyempi. Tarkisteen laskenta:
  1. Tarkistettavia numeroita painotetaan vasemmalta oikealle kertoimilla 2, 1, 2, 1 jne..
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 10:llä. Jakojäännös (summan viimeinen numero) on tarkiste.
Esimerkki: 179 N 1138574 2
	1  1  3  8  5  7  4  2
	2  1  2  1  2  1  2
	2  1  6  8 10  7  8  = 42 → 2
Menetelmän kyky paljastaa virheitä riippuu tarkistettavien numeroiden määrästä. Jos määrä on pariton, kuten eo. esimerkissä, kaikki vierekkäisten numeroiden keskinäiset vaihtumiset huomataan. Jos määrä on parillinen, osa vaihdoista jää havaitsematta, mutta yksittäisten numeroiden muutokset havaitaan paremmin (kaikkia ei havaita koskaan). Numerosarjan pituuden muuttuminen huomataan suunnilleen yhtä hyvin molemmissa tapauksissa. Kappaleessa Painokertoimet on selitetty, miksi tätä menetelmää ei voi pitää suositeltavana.

UPS:n seurantanumero

United Parcel Service (UPS) on yhdysvaltalainen kuriiripalveluyritys, joka toimii maailmanlaajuisesti, myös Suomessa. Jokaisella tavaralähetyksellä on seurantanumero (tracking number), jonka avulla lähetyksen kulkua palvelun toimipisteiden kautta voidaan seurata reaaliaikaisesti Internetissä (ainakin tämä on tarkoitus - asiakkaiden kertoman mukaan reaaliaikaisuus ei aina toteudu käytännössä). Seurantanumeron muoto on 1Z AAA AAA BB CCCC CCC T, jossa: 1Z on vakio (literaali), A on lähettäjän alfanumeerinen tunnus, B on alfanumeerinen palvelukoodi (toimitustapa), C on numeerinen lähetyksen yksilöivä tunnus ja T on tarkistenumero. Numero esitetään usein yhtenäisenä merkkijonona ilman välilyöntejä, mutta jos numero ryhmitellään, edelläoleva tapa näyttää olevan ainoa virallinen. Tarkisteen laskenta:
  1. Alussa olevaa 1Z-vakiota ei oteta mukaan tarkisteen laskentaan.
  2. Kirjaimet korvataan numeroilla seuraavan taulukon mukaisesti:
      A 2B 3C 4D 5E 6F 7G 8H 9
    I 0J 1K 2L 3M 4N 5O 6P 7Q 8R 9
    S 0T 1U 2V 3W 4X 5Y 6Z 7  
  3. Tarkistettavia numeroita (15 kpl) painotetaan vasemmalta alkaen kertoimilla 1, 2, 1, 2 jne..
  4. Tulot lasketaan yhteen.
  5. Tarkiste on numero, joka summaan on lisättävä, jotta tulos olisi tasan jaollinen 10:llä.
Esimerkki (aito): 1Z X7V 055 67 4371 648 2:
	1 Z X 7 V 0 5 5 6 7 4 3 7 1 6 4 8 2    Kirjaimet korvattu
	    5   3                            ← numeroilla
	    1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
	    5 4 3 0 5 0 6 4 4 6 7 2 6 8 8 = 68 → 2
Tilan säästämiseksi kustakin tulosta on merkitty näkyviin vain viimeinen numero; vain sillä on merkitystä tarkisteen laskennassa. Tällä tarkistuksella on oleellisesti samat heikkoudet kuin PallasProlla, mutta virhemahdollisuuksia lisää se, että kussakin tapauksessa kolmella tai neljällä eri merkillä on sama numeroarvo, esim. F = P = Z = 7. Huomaa että toisaalta F ja P, toisaalta Z ja 7 muistuttavat toisiaan, joten on helppo tehdä virheitä, joita tarkiste ei paljasta. Lisäksi muutamassa tapauksessa tietokoneen näppäimistössä vierekkäin olevilla näppäimillä on sama numeroarvo. Vrt. Esimerkki kirjainten numeroarvoista.

Useiden lähteiden mukaan UPS käyttää myös kahta muuta lyhyempää seurantanumerotyyppiä, mutten ole löytänyt kuvausta niiden tarkisteiden laskennasta. Kun aitoja esimerkkejäkään ei ole käytettävissä, asiaa ei voi selvittää edes kokeilemalla.


Kerroin 234

IMO-numero

IMO = International Maritime Organization = Kansainvälinen merenkulkujärjestö. IMO-numero on kaupallista merenkulkua harjoittavan matkustaja- tai rahtilaivan tunniste, joka muodostuu kirjaimista IMO sekä seitsemästä numerosta. Tunnuksia jakaa IHS Fairplay, aikaisemmin Lloyd's Register - Fairplay Ltd. Tunnisteen pitäisi olla selvästi näkyvissä laivan ulkopuolella (matkustajalaivoissa ylhäältä katsottaessa), ja se merkitään myös laivaa koskeviin dokumentteihin. Numero säilyy samana koko laivan eliniän, riippumatta rakenteellisista muutoksista tai nimen tai omistajan vaihtumisesta. Numeroa, joka on kerran yhdelle laivalle annettu, ei koskaan anneta toiselle. Viimeinen numero on tarkiste. Laskenta:
  1. Tarkistettavia numeroita painotetaan oikealta vasemmalle kertoimilla 2, 3, 4, 5, 6 ja 7.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 10:llä. Jakojäännös on tarkiste.
Esimerkki: IMO 7625811 (Kristina Katarina, Kotka)
	 7  6  2  5  8  1  1
	 7  6  5  4  3  2
	49 36 10 20 24  2  = 141 → 1
Menetelmä voitaisiin kuvata myös niin, että kertoimet ovat 3..8 vasemmalta oikealle, ja tarkiste on numero joka summaan on lisättävä, jotta tulos olisi tasan jaollinen kymmenellä.

Menetelmällä on samat vahvuudet ja heikkoudet kuin Kerroin 123:lla. Nämä on kuvattu Kemikaalin CAS-numeron yhteydessä. Huom! Tieto tarkisteen laskennasta ei perustu mihinkään julkaistuun dokumenttiin, vaan yli 50 aidon IMO-numeron analysointiin.

IMO-numeroiden tarkistuksesta olen kirjoittanut myös englanninkielisen kuvauksen, koska sellaista ei näytä Internetistä muualta löytyvän. Kuvaukseen liittyy tarkistusohjelma.

Huviveneillä on runkonumero (Hull Identification Number, HIN), joka on määritelty standardissa ISO 10087, mutta siinä ei ole tarkistetta.


Kerroin 123

Tätä menetelmää käytetään ISWC-koodissa ja kemikaalin CAS-numerossa. Ensinmainituissa on kuitenkin pieni lisäys perusmenetelmään nähden.

Tarkisteen laskenta voidaan tehdä kahdella tavalla, joiden suhde toisiinsa on hyvin samanlainen kuin ISBN-numeron tapauksessa. Esimerkki (tarkemmat kuvaukset sovellusten yhteydessä):

Laskentatapa 1
1  9  5  5  6
6  7  8  9
6 63 40 45  = 154 → 6
      
Laskentatapa 2
1  9  5  5  6
4  3  2  1
4 27 10  5  = 46 → 6
      
Voidaan havaita, että tietyn numeron painotuksesta eri laskentatavoilla saatavien tulojen yhteenlasku antaa aina kymmenellä jaollisen summan, esim. 63+27=60. Kummassakin sovelluksessa käytetään normaalisti sille ominaista laskentatapaa.

ISWC-koodi

ISWC = International Standard Work Code (ISO 15707). Ensimmäisessä vaiheessa käytössä on ISWC-T, jota käytetään musiikkiteosten (T = Tune) tunnistamiseen. ISBN-, ISBN-13 ja ISMN-numerosta poiketen ISWC:llä tunnistetaan teos, ei sen julkaisuasua. Tunniste muodostuu etuliitteestä ISWC, alkukirjaimesta T, yhdeksästä numerosta ja tarkistenumerosta. Luettavuuden parantamiseksi merkit voidaan ryhmitellä väliviivoilla ja pisteillä, mutta toisin kuin ISBN, ISBN-13 ja ISMN, ISWC on "tyhmä" tunniste, jonka numeroilla ei ole itsenäisiä merkityksiä. Tunniste ei siis kerro kohteestaan mitään muuten kuin ao. tietokannan kautta.

Tarkisteen laskenta: Tunnisteen numeroita painotetaan vasemmalta alkaen kertoimilla 1, 2, 3 jne.. T-kirjaimen arvo tarkistetta laskettaessa on 1, joka on myös sen painokerroin. Tulot lasketaan yhteen. Tarkiste on numero, joka summaan on lisättävä jotta tulos olisi tasan jaollinen kymmenellä.

Esimerkki: ISWC T-041.559.258-3

	T - 0  4  1 . 5  5  9 . 2  5  8 - 3
	1   1  2  3   4  5  6   7  8  9
	1   0  8  3  20 25 54  14 40 72   = 237 → 3
ISWC:n sanotaan perustuvan "vahvasti" ISMN:n (alkuperäiseen) syntaksiin, mutta en havaitse kovin suuria yhtäläisyyksiä sen paremmin muodossa, sisällössä kuin tarkisteen laskennassakaan. Tosin ISWC:n piti alun perin olla samanmittainen kuin ISMN, joten sekaannusten välttämiseksi valittiin toinen alkukirjain.

Standardointityön ollessa kesken käytettiin myös nimeä Information System Work Code. ISWC:stä on ollut tarkoitus kehittää myös muunnelmia muiden luovan työn tulosten tunnistamiseen, mutta työ ei näytä edistyvän.

Menetelmän vahvuuksia ja heikkouksia on kuvattu Kemikaalin CAS-numeron kohdalla.

Kemikaalin CAS-numero

Kemikaalin tunnistamiseen käytetty CAS-numero (Chemical Abstracts Service Registry Number) on muotoa AAAA-BB-T, jossa AAAA:n pituus vaihtelee mutta on enintään kuusi numeroa ja T on tarkiste. Laskenta: Tarkistettavia numeroita painotetaan oikealta alkaen kertoimilla 1, 2, 3 jne.. Tulot lasketaan yhteen ja summa jaetaan 10:llä. Jakojäännös on tarkiste. Esimerkkejä: Bentseeni 71-43-2 ja rikkihappo 7664-93-9:
	       7  1 - 4  3 - 2
	       4  3   2  1
	      28  3   8  3   = 42 → 2

	 7  6  6  4 - 9  3 - 9
	 6  5  4  3   2  1
	42 30 24 12  18  3   = 129 → 9
Lähde: CAS:n kotisivu. Kuten todetaan kappaleessa Painokertoimet, viisi ja kaikki parilliset numerot ovat tämäntyyppisessä järjestelmässä huonosti valittuja painokertoimia, mikä näkyy siten että tarkistus ei aina paljasta edes kaikkein tavallisinta virhettä, eli yhden numeron vaihtamista toiseksi (kokeile mitä tapahtuu jos rikkihapon koodin ensimmäinen 6 korvataan 8:lla tai jälkimmäinen 1:llä - ensimmäisen muutoksen tuottama koodi ei ole ainoastaan muodollisesti virheetön, vaan sitä vastaava aine on todella olemassa). Tarkistus paljastaa kuitenkin varsin hyvin kahden vierekkäisen numeron vaihtumisen keskenään.

Kemikaaleille on myös useita muita tunnistejärjestelmiä.


Summa 10

Lounasseteli

Tällä hetkellä (toukokuu 2012) käytettävissä lounasseteleissä on kaksi numerosarjaa, yksi alareunassa ja toinen oikeassa reunassa. Alareunan numerosarja voi näyttää esim. tällaiselta:
	13009 032    130770>
Kaksi ensimmäistä numerosarjaa ovat luultavasti setelin sarjanumero, pelkkä juokseva numero ilman sisäistä rakennetta. Oikealla puolella kaksi ensimmäistä numeroa osoittavat minkä vuoden loppuun saakka seteli on voimassa (esimerkissä 31.12.2013 saakka). Loput numerot osoittavat setelin arvon (esimerkissä 7,70 €). Oikean reunan numerot samassa setelissä ovat:
	24  282
Kun lasketaan yhteen sarjanumeron neljä viimeistä numeroa ja lisätään kymmenen, saadaan oikean reunan kaksi ensimmäistä numeroa, esimerkkisetelissä:
	9 + 0 + 3 + 2 + 10 = 24
Tätä on pidettävä erittäin yksinkertaisena (eli heikkona) tarkistuksena, mutta toisaalta se on riittävän yksinkertainen setelin vastaanottajan päässä laskettavaksi, ja ehkä juuri tämä on tarkoituskin.

Kolme viimeistä numeroa on painettu mustalla mustalle, mutta numerot heijastavat valoa eri tavalla kuin tausta. Havaituissa tapauksissa viimeinen numero on aina sama kuin sarjanumeron viimeinen numero, mutta kahdesta edeltävästä numerosta ei ole tarkempia tietoja. Arvaus: Numerot ovat tarkisteita, ja ne hohtavat ultravioletti- tai infrapunavalossa tai ovat magneettista painoväriä, tai ne on muuten helppo lukea koneellisesti, jonka jälkeen niitä voidaan verrata laskettuihin tarkisteisiin.


Moduli 9

Menetelmää käytetään hiukan eri tavoin soveltaen matkashekkien ja eurosetelien sarjanumeroissa sekä muuntogeenisten organismien tunnisteissa.

Huom! Kun 10-kantaisia lukuja käytettäessä tehdään jako 9:llä, jakojäännös on sama siitä riippumatta, jaetaanko alkuperäinen kokonaisluku vai sen numeroiden summa. Tämä helpottaa jakojäännöksen laskemista, jos jaettavana on suuri luku. Valitettavasti menetelmää ei voi yleistää muihin tarkisteita laskettaessa tavanomaisesti käytettäviin jakajiin. Sitä vastoin sääntö on yleistettävissä muille kantaluvuille: Kun B-kantaisia lukuja käytettäessä tehdään jako (B-1):llä, jakojäännös on sama siitä riippumatta, jaetaanko alkuperäinen kokonaisluku vai sen numeroiden summa (samaa kantalukua B on tietysti muistettava käyttää joka kohdassa).

Matkashekin sarjanumero

American Expressin (AmEx) matkashekin oikeassa ylänurkassa on yhdeksännumeroinen sarjanumero, joka toistuu osana shekin alareunassa olevaa optisesti tai magneettisesti luettavaa riviä. Tällä rivillä sarjanumeron loppuun on lisätty tarkiste, joka valitaan siten että koko numerojonon summa - ja samalla numeroiden muodostama luku - on tasan jaollinen yhdeksällä. Sarjanumeroa edeltävät numerot eivät ole tarkistuksessa mukana. Esimerkki: Sarjanumero 445·643·619, numeroiden summa on 42 → tarkiste on 3 (42+3=45, joka on tasan jaollinen 9:llä), tarkisteellinen numerojono on 4456436193.

Tämä tarkistus on todettu toimivaksi vuosina 1991 ja 2000 hankituissa AmExin shekeissä. VISA:n matkashekeissä kerrotaan käytettävän samaa tarkistusta. Joidenkin lähteiden mukaan tarkisteen pitäisi sisältyä itse sarjanumeroon, mutta havainnot eivät tue tätä.

Virheenpaljastuskyky on vaatimaton kaikissa sellaisissa menetelmissä, joissa tarkistettavat numerot lasketaan yhteen ilman painokertoimia. Vrt. Painokertoimet ja Havaittuja heikkouksia.

Eurosetelin sarjanumero

Euroseteleitä on kaksi sarjaa.
  • Vuonna 2002 käyttöön otettu alkuperäinen sarja, jonka sarjanumeroissa on yksi kirjain ja 11 numeroa. Tästä eteenpäin 2002-sarja.
  • Vuodesta 2013 alkaen käyttöön otettu uusittu sarja, jonka sarjanumeroissa on kaksi kirjainta ja 10 numeroa. Tästä eteenpäin 2013-sarja.
Kaikkien euroseteleiden sarjanumerot tarkistetaan samalla menetelmällä. Kirjaimet korvataan ASCII-koodeillaan seuraavan taulukon mukaisesti:
A 65B 66C 67D 68E 69F 70 G 71H 72I 73J 74K 75L 76 M 77
N 78O 79P 80Q 81R 82S 83 T 84U 85V 86W 87X 88Y 89 Z 90
Tämän jälkeen numerot, ml. viimeisenä oleva tarkiste, lasketaan yhteen (ei ole väliä sillä, otetaanko yhteenlaskuun kirjainten ASCII-arvot vai arvojen yksittäiset numerot). Jos sarjanumero on virheetön, summa on jaollinen 9:llä. Jos jaollisuus ei ole ilmeinen, numeroiden summausta toistetaan, kunnes jäljellä on vain yksi numero, joka virheetöntä sarjanumeroa tarkistettaessa on aina 9, ts. kun kirjain tai kirjaimet on korvattu numeroilla, sarjanumero on tasan jaollinen 9:llä.

Esimerkkejä: 20 €:n seteli X09093074411 ja 5 €:n seteli UD2048028219
	 X  0 9 0 9 3 0 7 4 4 1 1
	88  0 9 0 9 3 0 7 4 4 1 1 =  54 →  9

	 X  0 9 0 9 3 0 7 4 4 1 1
	88  0 9 0 9 3 0 7 4 4 1 1 = 126 →  9

	 U  D 2 0 4 8 0 2 8 2 1 9
	85 68 2 0 4 8 0 2 8 2 1 9 =  63 →  9

	 U  D 2 0 4 8 0 2 8 2 1 9
	85 68 2 0 4 8 0 2 8 2 1 9 = 189 → 18 → 9
1. ja 3. esimerkissä on summattu ASCII-arvojen numerot, mikä on helpompaa käsin laskettaessa. 2. ja 4. esimerkissä on summattu itse ASCII-arvot, mikä taas on helpompaa tietokoneohjelmassa.

Tarkiste voidaan laskea esim. seuraavalla kaavalla:
tarkiste = (350 - summa) mod 9 + 1
Jossa "summa" on tarkistettavien numeroiden summa (ml. kirjainten numeroarvot) ja 350 on mielivaltaisesti valittu luku, joka kuitenkin täyttää seuraavat ehdot: Luku plus yksi on tasan jaollinen yhdeksällä; luku on vähintään suurimman tarkisteen (9) verran suurempi kuin suurin mahdollinen summa (261). Esim:
Summa ilman tarkistetta on 53
350 - 53 = 297
297 mod 9 = 0
0 + 1 = 1 (tarkiste)
53 + 1 = 54
54 mod 9 = 0 (eli tarkiste 1 toteuttaa tarkistuksen)
Huomaa että tarkiste ei koskaan ole 0, vaikka se toteuttaisi tarkistuksen yhtä hyvin kuin 9. – Näinkin vaatimaton tarkistus riittänee koneelliseen lukuun, mutta olisi mielenkiintoista tietää, sisältyykö sarjanumeroon paremmin piilotettuja tarkistuksia, vrt. Tarkistettavan tiedon pituus (kehystetty teksti).

2002-sarjan setelien sarjanumeroissa kirjain osoittaa alkuperämaan seuraavan taulukon mukaisesti:
DViro PAlankomaat
ESlovakia RLuxemburg
FMalta SItalia
GKypros TIrlanti
HSlovenia URanska
JYhdistynyt kuningaskunta VEspanja
KRuotsi WTanska
LSuomi XSaksa
MPortugali YKreikka
NItävalta ZBelgia
Kirjaimille A..C ei ole määritelty merkityksiä, mutta Latvia ehtinee liittyä euroalueeseen ja saanee kirjaimen C ennen kuin 2002-sarja on kokonaan korvattu 2013-sarjalla. I, O ja Q on ilmeisesti jätetty käyttämättä sekaannusten välttämiseksi – luultavasti kaikkia kirjaimia ei käytetä myöskään 2013-sarjan seteleissä. J, K ja W eivät ole käytössä, koska nämä maat eivät käytä euroja. R ei ole käytössä, koska Luxemurgissa liikkeelle laskettavissa seteleissä on sen maan koodi, missä setelit on painettu. Maat joille ensimmäisessä vaiheessa annettiin kirjaimet J..Z ovat käänteisessä aakkosjärjestyksessä omakielisten nimiensä mukaan, paitsi Tanska ja Kreikka (Ελλαδα / Ellada), joiden paikat on vaihdettu, luultavasti siksi että kreikan kielessä ei ole W:tä, mutta Υ (Ypsilon) on. Irlanti on englanninkielisen nimensä mukaisessa paikassa, ehkä siksi että maan ensimmäinen virallinen kieli iiri ei ollut EU:n virallinen kieli silloin kun asiasta päätettiin.

2013-sarjan seteleissä 1. kirjain osoittaa painopaikan. 2. kirjaimella ei ole informaatiosisältöä, numeron vaihtaminen kirjaimeksi vain lisää mahdollisten sarjanumeroiden lukumäärää.

Suurin osa näistä tiedoista ja paljon muuta löytyvät myös englanninkielisestä Wikipediasta. Tiedot on tarkistettu vertaamalla niitä todellisiin sarjanumeroihin. Wikipediassa on tietoja myös mm. paljain silmin nähtävän vesileiman viivakoodista, kuvankäsittelyä vaikeuttavasta digitaalisesta vesileimasta, mikropainatuksesta, magneettisen musteen käytöstä, infrapuna- tai ultraviolettivaloon reagoivista materiaaleista, valokopioinnin estävästä EURion-kuviosta ja eurosetelin kuusimerkkisestä painokoodista (setelipaino, painolaatta, painoarkin rivi ja sarake). 2002-sarjan seteleissä painokoodin osoittama setelipaino on usein eri maassa kuin missä seteli on laskettu liikkeelle; 2013-sarjan seteleistä jälkimmäistä tietoa ei voi päätellä.

2002-sarjan sarjanumeroiden tarkistus on aikaisemmin kuvattu ainakin kahdella muulla tavalla, joista yhtä ei voi mielekkäästi soveltaa 2013-sarjaan, ja toinen tuottaa vääriä tuloksia, joten ylläolevaa kuvausta on pidettävä tuntemistani vaihtoehdoista ainoana oikeana.

Muuntogeenisen organismin tunniste

Muuntogeenisten organismien (Genetically Modified Organisms, GMO) ja niistä saatavien tuotteiden jäljittämiseksi Euroopan Unioni on ottanut käyttöön 11-merkkisen tunnisteen, joka on muodoltaan ja sisällöltään sama kuin OECD:n (Organisation for Economic Co-operation and Development, Taloudellisen yhteistyön ja kehityksen järjestö) määrittelemä BioTrack-tietokannassa ja bioturvallisuutta koskevassa tiedonvälitysjärjestelmässä käytettävä tunniste. Tunnistetta sanotaan myös 9-merkkiseksi, mutta tällöin ei oteta huomioon väliviivoja, vaikka ensimmäisen viivan sijainti on merkityksellinen. Tunnisteen muodolle on kaksi vaihtoehtoa:
  • AAA-BBBBB-T
  • AA-BBBBBB-T
AA on luvanhaltijan tunnus, joka voidaan muodostaa haltijan nimestä. BB yksilöi geneettisen muunnostapahtuman tai tapahtumat. Molemmat ovat aakkosnumeerisia (pieniä kirjaimia ei käytetä). T on numeerinen tarkiste. Toisin kuin useimmissa tämänkaltaisissa tunnisteissa, BB-osa ei ole luvanhaltijan vapaasti valittavissa, vaan kullekin tapahtumalle on luvanhaltijasta riippumaton tunniste (jonka tosin tietylle tapahtumalle ensimmäisenä lupaa hakeva voi määritellä varmistettuaan ensin ettei sama tunniste ole ennestään käytössä). Tarkisteen laskenta:
  1. Kirjaimille A..Z käytetään numeroarvoja 1..26 (A=1, B=2, C=3 ... Y=25, Z=26).
  2. Tunnisteen numerot ja kirjainten numeroarvot lasketaan yhteen.
  3. Jos summassa on enemmän kuin yksi numero, ne lasketaan yhteen. Tätä toistetaan kunnes jäljellä on vain yksi numero.
  4. Jäljelle jäävä numero (1..9) on tarkiste.
Esimerkkejä: Sokerijuurikas KM-ŲŲŲH71-4 ja tomaatti CGN-89322-3
	 K  M  -  Ų  Ų  Ų  H  7  1  -  4
	11 13     0  0  0  8  7  1  =  40; 4 + 0 = 4

	 C  G  N  -  8  9  3  2  2  -  3
	 3  7 14     8  9  3  2  2  =  48; 4 + 8 = 12; 1 + 2 = 3
Huomaa että erotukseksi O-kirjaimesta nolla esitetään säännönmukaisesti merkillä "Ų" (ISO Latin-1 -merkistössä heksadesimaalikoodi D8; sama kuin norjan ja tanskan iso Ö). Tämä on hyvä ottaa huomioon jos tehdään ohjelma syöttötietojen tarkistamiseksi - ei liene vahingoksi jos ohjelma hyväksyy nollat kahdella eri tavalla esitettyinä (Ų voi olla vaikea syöttää), mutta konvertoi tavalliset nollat oikeaan muotoon ennen tietojen lähettämistä eteenpäin.

Lähde: Komission asetus (EY) N:o 65/2004, Euroopan Unionin virallinen lehti 16.01.2004.

Tässä sovelluksessa menetelmä on kokonaisuutena vielä hiukan heikompi kuin matkashekkien ja eurosetelien sarjanumeroita tarkistettaessa. Noissa sovelluksissa luku on todennäköisesti koneellista, jolloin heikkotehoinen tarkistusmenetelmä on ehkä vielä joten kuten puolusteltavissa, mutta tämä sovellus on paremminkin eräiden lukumystiikka-taikauskon menetelmien kirjaimellinen toteutus kuin kunnollinen tarkistusmenetelmä. Ainoa mikä (toivottavasti) puuttuu on geenimuunnoksen vaikutusten arviointi tarkisteen perusteella lukumystiikan keinoin. Kymmenen kertaa parempia menetelmiä olisi lähes yhtä helppo käyttää. Tällainen "tarkistus" antaa kehittäjästään OECD:stä huonon kuvan. Ei suositella käytettäväksi muualla. Katso Havaittuja heikkouksia.

Tunnisteiden käytössä näyttäisi olevan ongelma, jos luvanhaltija, jolla on 3-merkkinen tunnus, haluaa rekisteröidä geenimuunnoksen, jolle on jo ennestään annettu 6-merkkinen tunnus, mutta jos tämä ei häiritse OECD:tä eikä EU:ta, ei kai minunkaan tarvitse asiasta välittää.


Moduli 7

Lentolipun sarjanumero

Tämä kuvaus ei perustu mihinkään Suomessa julkaistuun dokumenttiin, ja toistaiseksi on tutkittu vain Austrian Airlinesin, British Airwaysin, Finnairin, KLM:n ja Lufthansan lippuja, mutta samanlaista tarkistusta kerrotaan käytettävän Yhdysvalloissa, ja menetelmä saattaa olla maailmanlaajuinen.

Lipun alareunassa on numerosarja, joka esiintyy useassa eri muodossa. Lipun kuittiosassa (siinä joka jää matkustajalle lennon jälkeen) numerosarjan alussa on 0, jonka jälkeen tulee 3 + 10 numeroa, ja viimeisenä erikseen tarkiste joka lasketaan kaikista edeltävistä numeroista jakamalla niiden muodostama luku 7:llä. Jakojäännös on tarkiste. Esimerkki:

	0 105 0812661740 2
	01050812661740 mod 7 = 2
Huomaa että tarkiste ei koskaan ole suurempi kuin 6. Varsinaisissa lipuissa numerot ovat muuten samat, mutta tavanomaisella menopaluulennolla menolipussa ensimmäinen numero on 1 ja paluulipussa 2. Tarkiste muuttuu vastaavasti:
	1 105 0812661740 5
	11050812661740 mod 7 = 5

	2 105 0812661740 1
	21050812661740 mod 7 = 1
Monimutkaisemmilla lennoilla numerointia jatketaan pitemmälle. Kolminumeroinen osa on lentoyhtiön IATA-numero (International Air Transport Association - Kansainvälinen ilmakuljetusliitto; 074 = KLM, 105 = Finnair, 125 = British Airways, 220 = Lufthansa, 257 = Austrian Airlines jne.). Ilmoitetut numeromäärät perustuvat muutamiin tutkittuihin lippuihin; muissa (varsinkin yhdysvaltalaisten lentoyhtiöiden) lipuissa määrät voivat vaihdella.

Virheenpaljastuskyky on heikompi kuin kehittyneemmillä menetelmillä (vrt. Havaittuja heikkouksia), mutta erinomainen siihen nähden kuinka yksinkertainen menetelmä on. Tarvittaessa katso Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.


ISO 7064

Varoitus! Tämä kuvaus perustuu kokonaan toisen käden tietoihin ja omiin havaintoihini. Virallinen standardi ei ole ollut käytettävissäni. Eräät lähteinä käytetyt sovellusten kuvaukset ovat keskeneräisiä. Tässä esitetyt tiedot voivat muuttua tai olla virheellisiä.

ISO (Kansainvälinen standardointijärjestö, International Organization for Standardization) on määritellyt standardissa 7064 kahdeksan tarkistusmenetelmää, joita suositellaan käytettäviksi näppäilyvirheiden havaitsemiseksi. Joillakin tahoilla näyttää olevan vakaa usko standardin mukaisten menetelmien erinomaisuuteen. Menetelmien kehittämisen tavoitteet ovat olleet seuraavat:

  • Havaitaan kaikki tapaukset, joissa yksittäinen merkki vaihtuu toiseksi.
  • Havaitaan kaikki tai lähes kaikki tapaukset, joissa kaksi merkkiä vaihtavat paikkaa keskenään.
  • Havaitaan kaikki tai lähes kaikki tapaukset, joissa merkkien määrä muuttuu.
  • Havaitaan suuri osa tapauksista, joissa kaksi merkkiä vaihtuu toisiksi.
  • Havaitaan suuri osa kaikista muista virheistä.
Eli jotakuinkin samat tavoitteet kuin useimmissa standardin ulkopuolisissa tarkistusmenetelmissä. Erikseen sanotaan ettei menetelmiä ole tarkoitettu seuraaviin tarkoituksiin:
  • Automaattinen virheiden korjaaminen
  • Tahallisten muutosten havaitseminen
  • Koneiden välinen tiedonsiirto
Samat rajaukset sopivat hyvin kaikkiin tässä dokumentissa kuvattuihin menetelmiin.

Standardin ensimmäinen versio julkaistiin 1983 ja toinen vuonna 2003. Standardin mukaiset menetelmät eivät näytä levinneen kovin laajalle. Tähän on luullakseni useita syitä:

  • Monet nykyisin käytettävät menetelmät ehtivät tulla käyttöön ennen standardin julkistamista, vaikken voi olla panematta merkille, että sen jälkeenkin on laadittu useita ISO-standardeja, joissa käytetään muita kuin tähän standardiin sisältyviä menetelmiä.
  • Monien tarkistusmenetelmien kuvaukset ovat vapaasti saatavissa Internetistä (tosin parin menetelmän kohdalla tämä minun dokumenttini näyttää olevan ainoa lähde), mutta standardin virallinen kuvaus on erikseen tilattava ja siitä on myös maksettava. Viimeksi tarkistaessani 23.03.2013 hinta oli 80 Sveitsin frangia (CHF) eli 65,51 € plus mahdollisesti postikulut ja ALV. Epävirallisia kuvauksia on ollut vaikea löytää.
  • Tunnen vain viisi standardiin sisältyvistä kahdeksasta menetelmästä, mutta eräät niistä ovat laskennallisesti monimutkaisempia ja siksi vähemmän houkuttelevia kuin standardin ulkopuoliset menetelmät.
  • Vaikuttaa siltä että kuvaukset ovat matemaatikoiden toisille matemaatikoille kirjoittamia, vaikka kuvausten käyttäjät olisivat pääasiassa ohjelmoijia, ja useille tuntemilleni ohjelmoijille (myös minulle) monimutkaisempien matemaattisten merkintöjen lukeminen on jonkinasteinen haaste, eli standardia on vaikea ymmärtää. Tässä suhteessa toisen käden kuvaukset ovat usein parempia.
Menetelmät näyttävät kuitenkin tulevan vähitellen käyttöön uusissa sovelluksissa. Tähän viittaa ainakin se, että menetelmistä löytyy nyt (huhtikuussa 2005) tietoja helpommin kuin vuosi tai kaksi sitten.

Standardiin sisältyvät menetelmät ovat seuraavat (taulukossa "numero" tarkoittaa kymmenjärjestelmän numeroa 0..9 ja "kirjain" anglosaksisten aakkosten kirjainta A..Z):
"Puhtaat" menetelmät
"Puhtaissa" menetelmissä käytetään vain yhtä jakajaa, jota voidaan kuitenkin käyttää useita kertoja samassa laskelmassa.
MenetelmäSovellusalueTarkisteetKommentti
ISO Mod 11-2Numerot1 numero tai X-kirjain Tarkempi kuvaus erillisessä kappaleessa.
ISO Mod 37-2Numerot ja kirjaimet1 numero tai kirjain tai * Tarkempi kuvaus erillisessä kappaleessa.
ISO Mod 97-10Numerot2 numeroa Tätä menetelmää käytetään IBAN:issa, RF-viitteessä ja IPI:n maksunaihekoodissa.
ISO Mod 661-26Kirjaimet2 kirjainta Ei lisätietoja.
ISO Mod 1271-36Numerot ja kirjaimet2 numeroa tai kirjainta Ei lisätietoja.
Hybridimenetelmät
Hybridimenetlmissä käytetään kahta jakajaa, joista toinen vastaa käsiteltävän merkistön merkkien määrää (10, 26 tai 36) ja toinen on em. jakaja plus yksi.
MenetelmäSovellusalueTarkisteetKommentti
ISO Mod 11,10Numerot1 numero Tarkempi kuvaus erillisessä kappaleessa.
ISO/IEC Mod 27,26Kirjaimet1 kirjain Kuvataan samaksi kuin Mod 37,36 mutta rajattuna kirjainten käsittelyyn.
ISO/IEC Mod 1271-36Numerot ja kirjaimet1 numero tai kirjain Ei lisätietoja.
Epäsuorasti on pääteltävissä, että standardi sallii perusmenetelmien muunnelmien käyttämisen sovelluksissa, joihin ei sopivaa menetelmää ole valmiiksi tarjolla. ISO:n omat dokumentit mainitsevat ainakin menetelmät Mod 16-3 ja Mod 37,36 tähän standardiin viitaten, vaikka tämännimisiä menetelmiä ei standardiin sellaisenaan sisälly. Oletan että standardi sisältää tarkat ohjeet muunnelmien tekemiseksi, koska muuten on aivan liian helppoa luoda huonoja menetelmiä. Menetelmien nimien taustalla on varmaan jokin systeemi, mutta käytettävissä olevien tietojen perusteella se ei ole minulle selvinnyt.

Joitakin menetelmiä nimitetään rekursiivisiksi. Tässä tapauksessa se tarkoittaa, että kunkin merkin käsittelyssä käytetään yhtenä tekijänä välitulosta, joka on saatu edellisen merkin käsittelystä. Mod 11,10 on esimerkki. Nimitys sopii myös standardin ulkopuoliseen Verhoeffin menetelmään.

Dokumentin muista pääkappaleista poiketen tässä pyritään keskittymään menetelmiin enemmän kuin sovelluksiin.

Joidenkin menetelmien nimissä esiintyvä IEC on International Electrotechnical Commission (Sähköalan kansainvälinen standardointijärjestö), joka toimii yhteistyössä ISO:n ja ITU:n (International Telecommunication Union, Kansainvälinen televiestintäliitto) kanssa. Nämä organisaatiot laativat valtaosan kansainvälisistä standardeista strategisena partnerinaan WTO (World Trade Organization, Maailman kauppajärjestö). Standardoinnin ensisijainen tehtävä on kansainvälisen kaupan helpottaminen.

Hieman yllättäen yksi kaikkein yleisimmistä tarkistusmenetelmistä - Luhnin moduli 10 - ei sisälly ISO 7064:än, vaan kuvataan standardissa ISO 7812-1.

Organisaation kansainvälinen nimi ISO ei ole lyhenne englanninkielisestä nimestä International Organization for Standardization eikä mistään muustakaan, vaan se on johdettu kreikan sanasta "isos", joka tarkoittaa "yhtäläinen". Vrt. isobaari, isotermi, isotropia.

(Ajatus standardiin 7064 sisältyvien menetelmien ottamisesta mukaan tähän dokumenttiin on ollut mielessäni useita vuosia, mutta aikaisemmin on ollut vaikeaa löytää ristiriidatonta tietoa edes tämänkään vertaa. Kimmokkeen yrittää selvittää asiaa uudelleen antoi sähköpostien vaihto Tuomas Salsteen kanssa tammikuussa 2005, mutta asian laajuuden ja muiden kiireiden vuoksi teksti valmistui vasta huhtikuussa. Samassa yhteydessä lisäsin kuvauksen Verhoeffin menetelmästä, josta aikaisemmin oli vain maininta.)

Mod 11-2

Tämän menetelmän kohdalla joudun esittämään vielä suurempia varauksia kuin standardiin sisältyvien menetelmien kuvauksissa yleensä: Ainoa löytämäni lähde on yksi nettisivu, jolla algoritmi on koodattu useilla ohjelmointikielillä. Dokumentointi on enimmäkseen kiinaksi, ja kyseessä näyttää olevan Kiinan kansantasavallan henkilökortin vanhanmallisen numeron muuttaminen uudenmalliseksi, mihin sisältyy mm. tarkisteen lisääminen. Kuvauksen uskottavuutta saattaa lisätä (tai sitten vähentää) se, että kaikki osatekijät ovat tuttuja jostakin muusta yhteydestä. Laskenta:
  1. Tarkistettavia numeroita painotetaan oikealta alkaen kertoimilla 1, 2, 4, 8, 5, 10, 9, 7, 3 ja 6. Kerroinsarjaa toistetaan tarvittaessa.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 11:llä.
  4. Jakojäännös vähennetään 12:sta.
  5. Erotus jaetaan 11:llä.
  6. Tarkiste määräytyy jakojäännöksen perusteella seuraavasti:
    • 0..9: Jakojäännös on tarkiste.
    • 10: Tarkiste on X-kirjain.
Kuvauksesta on myös versioita, joissa kohdat 4..6 on korvattu poimimalla tarkiste taulukosta, mutta näennäisestä monimutkaisuudestaan huolimatta käyttämäni versio on ohjelmakoodina lyhyempi. Ensimmäistä kohtaa lukuun ottamatta menetelmä on oleellisesti sama kuin standardiin sisältyvä Mod 37-2, kun eräät vakiot ymmärretään käytettävästä merkistöstä riippuviksi. Esimerkki: 2713-22:8
	 2  7  1  3  -  2  2  :  8
	10  5  8  4     2  1
	20 35  8 12     4  2  =  81

	81 mod 11 = 4; 12 - 4 = 8; 8 mod 11 = 8 → 8
Kerroinsarja 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ja 1 saadaan kaavalla 6^p mod 11 jossa p on position numero 0..10 vasemmalta oikealle. Tämä liittyy jotenkin lukuteoriaan ja erityisesti Fermat'n pieneen lauseeseen. Samaa kerroinsarjaa käytetään myös Y-tunnuksen ja sen muunnelmien tarkistuksessa sekä useissa muissa menetelmissä eri puolilla maailmaa, mm. latvialaisessa ja itäsaksalaisessa henkilötunnuksessa (Personenkennzahl) ja erityisesti pankkitilien numeroiden ja muiden pankkitoimintaan liittyvien numerosarjojen tarkistuksissa, mutta vaikka kerroinsarja ja jakaja ovat samat, jakojäännöksen käsittely vaihtelee, eli kysymys ei välttämättä ole standardin ISO 7064 mukaisista menetelmistä, mutta joissakin tapauksissa kyseessä voi olla standardin muunnelma. Toistuneiden väärinkäsitysten vuoksi lienee aiheellista korostaa, että tässä kappaleessa kuvattua menetlmää ei käytetä Y-tunnuksen ja sen muunnelmien tarkistamiseen, vaikka kerroinsarja perustuu samaan kaavaan.

Olen jättänyt kuvauksesta pois yhden em. ohjelmissa esiintyvän piirteen: Tarkistettaviin merkkijonoihin lisätään yhteen kohtaan muiden numeroiden väliin numerot 19 ennen tarkisteen laskentaa, ja tämä lisäys sisältyy ohjelmien palauttamiin tarkisteellisiin merkkijonoihin. Tämä kuuluu sovellukseen, ei menetelmään (syntymävuoden muuttaminen kaksinumeroisesta nelinumeroiseksi).

Mod 37-2

Tarkistus voi kohdistua numeroihin 0..9 ja/tai kirjaimiin A..Z. Laskenta:
  1. Tarkistettavien merkkien positiot numeroidaan oikealta vasemmalle 1:stä alkaen. Tarkisteen positiota ei numeroida.
  2. Tarkistetta laskettaessa kirjaimille käytetään numeerisia arvoja, jotka ovat samat kuin passien yhteydessä annetussa taulukossa.
  3. Kukin tarkistettava numero tai kirjaimen numeroarvo kerrotaan painokertoimella, joka on 2 potenssiin ko. position numero. Kertoimet ovat siis oikealta alkaen 2, 4, 8, 16 jne..
  4. Tulot lasketaan yhteen. (Tulot ovat parillisia, joten niin on summakin.)
  5. Summa jaetaan 37:llä.
  6. Jakojäännös vähennetään 38:sta.
  7. Erotus jaetaan 37:llä.
  8. Tarkiste määräytyy jakojäännöksen perusteella:
    • 0..9: Jakojäännös on tarkiste.
    • 10..35: Tarkiste on kirjain joka saadaan em. taulukosta jakojäännöksen perusteella.
    • 36: Tarkiste on "*" (tähti, asteriski).
Vaikka ylläoleva on menetelmän tarkka kuvaus, sen soveltaminen sellaisenaan voi johtaa tehottomuuteen (toistuvat potenssiinkorotukset) tai pitkiä merkkijonoja käsiteltäessä jopa ylivuotoon (isot painokertoimet). Molemmat voidaan helposti välttää:
  1. Käsitellään merkkijono vasemmalta oikealle.
  2. Kunkin merkin kohdalla numero tai kirjaimen numeroarvo lisätään apumuuttujaan (joka tietysti asetetaan nollaksi ennen silmukkaa).
  3. Lisäyksen jälkeen apumuuttujan arvo kerrotaan kahdella ja tulosta otetaan modulo 37.
Eli kaavana silmukan runko muodostuu yhdestä ainoasta rivistä (tietysti ao. ohjelmointikielelle muokattuna):

sum = (sum + jono(ind1)) × 2 mod 37

Potenssiinkorotukset jäävät pois, missään vaiheessa ei jouduta käsittelemään kovin suuria lukuja, ja lisäksi algoritmin viides kohta on jo valmiiksi tehty kun silmukasta tullaan ulos.

Esimerkki: TAD 5728-V

	   T    A    D    5    7    2    8 - V    Kirjaimet korvattu
	  29   10   13                          ← numeroilla
	 128   64   32   16    8    4    2
	3712  640  416   80   56    8   16 = 4928

	4928 mod 37 = 7; 38 - 7 = 31; 31 mod 37 = 31 → V
Dokumentissa jossa kuvataan Mod 16-3 väitetään, että Mod 37-2 ei aina havaitse yksittäisen merkin vaihtumista toiseksi. En havaitse menetelmässä mitään piirrettä, josta tällainen ominaisuus voisi seurata, eikä sellaista tullut esiin myöskään yli 10 miljoonassa testissä, joissa havaittiin myös kaikki vierekkäisten numeroiden keskinäiset vaihtumiset. Tällainen testi ei tietenkään ole matemaattinen todistus.

Kansainvälinen verensiirtoyhdistys (International Society of Blood Transfusion, ISBT) on määritellyt standardin ISBT 128, jota käytetään verenluovutus-, verivalmiste-, kudos- ja soluerien tunnistamiseen. Kuhunkin erään liittyy joukko koodeja, joista useisiin liitetään Mod 37-2:n mukainen tarkiste. Paitsi numero- ja kirjainjonoina, koodit esitetään myös viivakoodeina, ja standardin nimi viittaakin viivakoodijärjestelmään Code 128. Euroopan Unioni harkitsee verensiirtoihin ym. liittyviä standardointitarpeita, ja kun ne on kartoitettu, päätetään tuleeko eurooppalaiseksi standardiksi ISBT 128, Eurocode vai kehitetäänkö kokonaan uusi järjestelmä.

Esimerkki: G1234 89 654321 Y

Suomen Punainen Risti (SPR) käyttää ISBT 128:a.

Dokumentissa joka määrittelee ISBT 128:n sanotaan, että jos tätä menetelmää käytettäessä lasketaan tarkiste virheettömälle tarkisteelliselle merkkijonolle, tulos on aina * (tähti). Tämä tieto helpottaa tarkistuksen koodaamista.

Mod 11,10

Ohjelma Mod 11,10 -menetelmälle ja muunnelmille

Perusmenetelmä soveltuu vain numeroille 0..9, mutta menetelmää voidaan muunnella. Perusmenetelmässä kantaluku on 10, mutta lukuarvon sijasta käytän jatkossa termiä kantaluku, koska se helpottaa muunnelmien ymmärtämistä. Laskenta:

  1. Laskennassa käytettävälle välitulokselle annetaan alkuarvoksi kantaluku.
  2. Käsitellään numero kerrallaan vasemmalta oikealle.
    1. Lisätään tarkistettava numero välitulokseen.
    2. Jaetaan välitulos kantaluvulla. Jakojäännös on uusi välitulos. Jos kuitenkin jakojäännös on nolla, sen sijasta käytetään kantalukua.
    3. Kerrotaan välitulos kahdella.
    4. Jaetaan välitulos luvulla joka on kantaluku plus yksi. Jakojäännös on uusi välitulos (tässä vaiheessa välitulos on aina välillä 1..kantaluku).
  3. Kun viimeisen tarkistettavan numeron käsittelystä saadun välituloksen ja (virheettömän) tarkisteen summa jaetaan kantaluvulla, jakojäännös on yksi.
Kovasti yrittämällä kohdan C olisi varmaan voinut muotoilla vaikeammin ymmärrettäväksi, mutta näin se näkemissäni dokumenteissa on kirjoitettu. Käytännössä tarkiste saadaan kaavalla

tarkiste = ( (kantaluku+1) - viimeinen_välitulos ) mod kantaluku

Esimerkki: Lasketaan tarkiste numerosarjalle 23743 (VT = välitulos, N = tarkistettava numero; muut otsikot viittaavat eo. listaan):

VTNB1B2B3B4
10212244
4377143
371010209
9413366
6399187
Josta em. kaavalla (11-7) mod 10 saadaan tarkisteeksi 4, eli tarkisteen kanssa 237434. Huomataan myös että (7+4) mod 10 = 1, eli eo. listan kohta C tulee täytetyksi.

Jos tarkisteelliselle virheettömälle numerosarjalle lasketaan uusi tarkiste, se on aina kantaluku miinus yksi. Tämä tieto helpottaa syötetyn numerosarjan tarkistamista ohjelmassa. Eo. esimerkissä siis 237434:lle saataisiin tarkisteeksi 9.

Menetelmää käytetään Saksassa verenluovutuspussien ja verivalmiste-erien tunnistamiseen, ja Eurocode-niminen organisaatio esittää samaa systeemiä kansainväliseksi standardiksi. Tässä tapauksessa koodi muodostuu seuraavista osista:

  1. 3-numeroinen maatunnus (ISO 3166-1); Suomen koodi on 246
  2. 3-numeroinen laitostunnus
  3. 9-numeroinen sarjanumero
  4. 1-numeroinen tarkiste
Eurocode-järjestelmän mukaisia koodeja voidaan ainakin periaatteessa käyttää tunnisteina myös lukemattomissa muissa sovelluksissa. Sarjanumeron ja tarkisteen yhteinen pituus vaihtelee sovelluskohtaisesti 6..12 numeroon. Tarkiste voi olla 1- tai 2-merkkinen; se voi myös puuttua (ei suositella) tai sen laskentamenetelmä voi vaihdella, mutta menetelmän täytyy olla ISO-standardin mukainen. Koska tunniste ei sisällä sovellustunnusta, tämä tieto on saatava jostakin muualta. Siinä missä ISBT 128 soveltuu myös kudos- ja soluerien tunnistamiseen, Eurocodeen nämä ominaisuudet ovat vasta suunnitteilla.

Esimerkki: 276 616 973 212 561 5

Mod 11,10:n muunnelmat

Muutamista lähteistä (ml. ISO:n dokumentit) on pääteltävissä, että Mod 11,10:stä voidaan tehdä muunnelmia varsin helposti vaihtamalla kantalukua ja siitä riippuvia vakioita. Vain parilliset kantaluvut ovat mahdollisia. Esimerkkejä:
  • Mod 17,16 heksadesimaalinumeroille
  • Mod 37,36 merkkijonoille, joissa esiintyy numeroita 0..9 ja kirjaimia A..Z
Molemmissa tapauksissa kirjaimille käytetään numeroarvoja, jotka näkyvät passien yhteydessä annetusta taulukosta. Tarkiste voi vaihdella välillä 0..kantaluku-1, eli se kuuluu aina samaan merkkijoukkoon johon tarkistus kohdistuu. Myös kantaluvun 32 käyttö voi olla mielekästä (merkistö 0..9 ja A..V). Tällöin jokaisen merkin voidaan tulkita vastaavan yhtä viiden bitin ryhmää. ISO/IEC Mod 27,26 kuvataan samaksi kuin Mod 37,36, mutta rajattuna kirjainten A..Z käsittelyyn, eli oletan että tässä menetelmässä kantaluku on 26, kirjaimia vastaavat numeroarvot ovat 0..25 ja muita eroja ei ole. Tuatara tuntee kantaluvut 10, 16 ja 36, ja olen lisännyt myös kantaluvun 26 niin, että sen valinta vastaa ISO/IEC Mod 27,26:ta sellaisena kuin olen menetelmän ymmärtänyt.

Menetelmä havaitsee tavallisimmat virheet seuraavasti:

  • Yhden numeron vaihtuminen toiseksi havaitaan aina.
  • Kahden vierekkäisen numeron vaihtuminen keskenään havaitaan aina, jos niiden erotus on muu kuin yksi. Erotuksen katsotaan olevan yksi myös "ympäripyörähdyksessä", eli esim. kantaluvulla 16 F:n ja 0:n erotus on tässä tarkastelussa yksi.
  • Jos kahden vierekkäisen keskenään vaihtuvan numeron erotus on yksi, vaihto jää havaitsematta todennäköisyydellä 1/(n-1), jossa n on kantaluku. Huomaa että tapaukset, joissa vierekkäisten numeroiden erotus on yksi, todennäköisesti vähenevät kantaluvun kasvaessa. (Pienessä testiaineistossa havaitsematta jäävien virheiden osuus voi poiketa eo. kaavasta paljonkin.)
  • Yksittäisen numeron jättäminen pois tai lisääminen jää havaitsematta todenäköisyydellä 1/n, jossa n on kantaluku.
Havaitsematta jäävät virheet ovat suurimmaksi osaksi erilaisia, mutta em. virheiden osalta menetelmä on kokonaisuutena varsin tarkasti yhtä hyvä kuin Luhnin moduli 10. Tämä koskee myös muunnelmia, kun molemmissa menetelmissä käytetään samaa kantalukua. Luhnin moduli ei kuitenkaan koskaan havaitse peräkkäisten numeroparien vaihtumista keskenään, joka tässä menetelmässä jää havaitsematta vain todennäköisyydellä 1/(n-1), jossa n on kantaluku.

Teoriassa lähes mikä tahansa parillinen luku kelpaa kantaluvuksi, mutta käytännön sovelluksissa 10:tä pienemmät arvot eivät ole suositeltavia, koska tällaiset menetelmät eivät soveltuisi edes kaikille 10-järjestelmän numeroille, ja jakajien pienentyessä menetelmän suorituskyky heikkenee nopeasti. Vastaavasti jakajien (kantaluvun) kasvattaminen parantaa suorituskykyä, mutta jos kantaluku on suurempi kuin 36, on päätettävä millä merkeillä suurempia numeroita esitetään. Joidenkin ohjelmointikielten tuki eri kantaluvuille loppuu 36:een.

Muunnelmaa Mod 37,36 käytetään mm. ISAN:in (International Standard Audiovisual Number) tarkistuksessa. ISAN on rinnakkainen järjestelmille ISBN, ISBN-13, ISSN, ISMN, ISWC ja ISTC. Nimen mukaisesti ISAN:ia käytetään audiovisuaalisten töiden tunnisteena, jonka rakenteesta on kaksi versiota:

  1. Perusmuoto:
    1. Etuliite ISAN, ei vaikuta tarkisteen laskentaan.
    2. 16 heksadesimaalinumeroa neljänä neljän numeron ryhmänä, 12 ensimmäistä numeroa ovat varsinainen tunnus, 4 viimeistä ovat teoksen osan tunnus (tai 0000).
    3. Tarkiste, numero 0..9 tai kirjain A..Z.
  2. Laajempi muoto (ei välttämättä käytössä alkuvaiheessa):
    1. Alkuosa = perusmuoto.
    2. Versionumero, kahdeksan heksadesimaalinumeroa, kahtena neljän numeron ryhmänä.
    3. Tarkiste, numero 0..9 tai kirjain A..Z, lasketaan edeltävistä 24 heksadesimaalinumerosta, mutta perusmuodon tarkistetta ei oteta laskentaan mukaan (vaikka laskentamenetelmä pystyisi senkin käsittelemään).
Esimerkki: ISAN A36F-012C-36DE-0000-K-27B9-C453-S

Etuliite erotetaan tunnisteesta välilyönnillä. Neljän numeron ryhmät erotetaan toisistaan ja tarkisteista välilyönneillä tai väliviivoilla. Tekstinä esitettävässä muodossa ei käytetä pieniä kirjaimia. Huom. 1! ISAN:ia käsittelevissä dokumenteissa on useita esimerkkejä, joissa tarkisteet eivät vastaa tätä kuvausta, mutta tarkisteiden laskenta on omassa liitteessään kuvattu hyvin selväsanaisesti. Huom. 2! Internetistä löytyy myös dokumentteja joissa ISAN:in tarkisteen laskenta on kuvattu niin kuin menetelmä olisi Mod 11,10 tai Mod 17,16. Nuo dokumentit eivät kuitenkaan ole virallisia standardeja, vaan näyttävät liittyvän standardin kehittämisen aikaiseen keskusteluun. Lisäksi olen melko varma siitä, että jälkimmäisessä tapauksessa menetelmän kuvaus on virheellinen (oikeat toimenpiteet mutta väärä järjestys ja heikompi virheenpaljastuskyky).

Mod 16-3

Tämän heksadesimaalinumeroille tarkoitetun menetelmän sanotaan perustuvan standardiin ISO 7064, vaikka menetelmä ei sellaisenaan standardiin sisälly. Laskenta:
  1. Tarkistettavia numeroita painotetaan oikealta alkaen (desimaalijärjestelmän) kertoimilla 3, 9, 11 ja 1. Kerroinsarjaa toistetaan tarpeen mukaan.
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan (desimaalijärjestelmän) luvulla 16.
  4. Jakojäännöstä vastaava heksadesimaalinumero on tarkiste (= summan viimeinen numero, jos summaa käsitellään heksadesimaalilukuna).
Esimerkki: 3A-771.7
	3  A  -  7  7  1  .  7
	3 10     7  7  1        ← Vastaava desimaaliluku
	3  1    11  9  3
	9 10    18 63  3 = 103 ≡ 7 (mod 16)
Menetelmää käytetään sovelluksessa nimeltä International Standard Textual Work Code (ISTC), joka on rinnakkainen järjestelmille ISBN, ISBN-13, ISSN, ISMN, ISWC ja ISAN. Koodi muodostuu viidestä osasta:
  1. Etuliite ISTC (ei vaikuta tarkisteen laskentaan).
  2. Koodin antaneen organisaation tunniste, kolme heksadesimaalinumeroa.
  3. Vuosiluku, neljä desimaalinumeroa, käsitellään tarkisteen laskennassa samoin kuin heksadesimaalinumeroita.
  4. Yksilöivä numero, kahdeksan heksadesimaalinumeroa.
  5. Tarkiste, yksi heksadesimaalinumero.
Esimerkki: ISTC 0A9 2001 12C4F132 4

ISTC:llä tunnistetaan tekstimuotoinen työ sen eri käsittelyvaiheissa kirjoittajan ja lukijan välillä, mutta lopulliselle julkaistavalle työlle annetaan jonkin muun järjestelmän mukainen tunniste, kuten ISBN-numero, ISBN-13, SICI tai BICI.


Muita tarkistusmenetelmiä

Tähän on koottu kuvauksia tarkistusmenetelmistä, joiden sovellukset jostakin syystä eivät ainakaan koko laajuudessaan kuulu tämän dokumentin aihepiiriin.

Verhoeffin menetelmä

Ohjelma Verhoeffin menetelmälle

Verhoeff äännettänee suunnilleen "ferhuf".

Verhoeffin menetelmälle on ominaista, että se on melko yksinkertainen ohjelmallisesti toteutettavaksi, mutta monimutkainen selitettäväksi, vaikka aion selittää pelkän käytännön toteutuksen, ja jätän teorian mahdollisimman vähiin, kun en sitä edes ymmärrä. Kaikki muut tuntemani menetelmät ovat pelkkiä yksinkertaisia laskentakaavoja, mutta tähän ei intuitioni riitä. Se vain toimii, kun minua fiksumpi on sen valmiiksi miettinyt.

Menetelmässä käytetään kolmea taulukkoa:

Verhoeffin permutaatiotaulu
 0123456789
00123456789
11576283094
25803796142
38916043527
49453126870
54286573901
62793806415
77046913258
 
Verhoeffin "kertotaulu"
 0123456789
00123456789
11234067895
22340178956
33401289567
44012395678
55987604321
66598710432
77659821043
88765932104
99876543210
 
Verhoeffin inversiotaulu
0123456789
0432156789

Tässä "kertotaulussa" kertolaskun vaihdantalaki ei ole voimassa, eli A×B ei välttämättä ole sama kuin B×A. Kerrotaan että taulun sisältö on mahdollista järjestää toisinkin niin, että menetelmä edelleen toimii, mutta tämä on ainoa näkemäni vaihtoehto. Luultavasti vain hyvin harvat vaihtoehdot ovat toimivia, ja nekin tuottavat eri tarkisteita kuin tässä kuvataan. Jotkin lähteet sanovat taulukkoa Verhoeffin "yhteenlaskutauluksi". Permutaatiotaulun kuusi viimeistä riviä tuotetaan yleensä ohjelmasilmukassa sen sijaan että ne annettaisiin vakiona. Tuatarassa on esimerkki (lähdekielisessä koodissa). Myös tämän taulun sisällölle on muita toimivia vaihtoehtoja. Menetelmä:

  1. Tarkiste on ensimmäinen numero oikealta. Määritellään että tarkisteen positio on 0, ja vasemmalle edettäessä positiot kasvavat 1:n välein. Positiot ovat samat myös tarkistetta lisättäessä, eli oikeanpuolimmaisen tarkistettavan numeron positio on silloinkin 1.
  2. Annetaan välitulokselle arvo 0.
  3. Käsitellään numerosarjaa oikealta vasemmalle. Tarkistetta lisättäessä aloitetaan oikeanpuolimmaisesta tarkistettavasta numerosta, tarkistusta tehtäessä tarkisteesta. Jokaisen numeron kohdalla:
    1. Poimitaan Verhoeffin permutaatiotaulusta numero, jonka rivin osoittaa käsiteltävän numeron positio modulo 8 ja sarakkeen käsiteltävä numero itse.
    2. Poimitaan Verhoeffin kertotaulusta numero, jonka rivin osoittaa aikaisempi välitulos ja sarakkeen Verhoeffin permutaatiotaulusta poimittu numero. Kertotaulusta poimittu numero on uusi välitulos.
  4. Jos tehdään tarkistusta ja numerosarja on virheetön, välitulos on 0 kun kaikki numerot on käsitelty. Jos halutaan lisätä tarkiste, se katsotaan viimeisen välituloksen perusteella Verhoeffin inversiotaulusta.
Pidetään esimerkki lyhyenä, eli määritellään (tämän menetelmän kohdalla ei oikein voi puhua laskemisesta) tarkiste numerosarjalle 41:
  1. Poimitaan permutaatiotaulusta [1,1] → 5
  2. Poimitaan kertotaulusta [0,5] → 5
  3. Poimitaan permutaatiotaulusta [2,4] → 7
  4. Poimitaan kertotaulusta [5,7] → 3
  5. Poimitaan inversiotaulusta [3] → 2
Eli tarkisteellinen numerosarja on 412. Tarkistetaan:
  1. Poimitaan permutaatiotaulusta [0,2] → 2
  2. Poimitaan kertotaulusta [0,2] → 2
  3. Poimitaan permutaatiotaulusta [1,1] → 5
  4. Poimitaan kertotaulusta [2,5] → 7
  5. Poimitaan permutaatiotaulusta [2,4] → 7
  6. Poimitaan kertotaulusta [7,7] → 0
Viimeinen välitulos on 0, kuten pitääkin.

Alankomaalainen matemaatikko Jacobus Verhoeff (1927-) julkaisi kehittämänsä menetelmän vuonna 1969. Menetelmän sanotaan paljastavan jopa 99,8 % syöttövirheistä, mutta en tiedä miten tämä on laskettu. Tarkistus paljastaa sekä kaikki yhden numeron muutokset että kaikki kahden vierekkäisen numeron vaihtumiset keskenään, ja yli 90 % kaikista muista virheistä, ja on siten parempi kuin mikään toinen tunnettu yksinumeroisen tarkisteen tuottava menetelmä. Käytännön sovellukset näyttävät enimmäkseen olevan vielä suunnitteilla. Menetelmää käytettiin saksalaisissa seteleissä ennen euron käyttöön ottoa. Ainoa tuntemani nykyinen maininnan arvoinen sovellus on SNOMED Clinical Term Identifier (SCTID; SNOMED = Systematised Nomenclature of Medicine). Menetelmää kuvataan mm. seuraavissa dokumenteissa (linkit vievät tämän sivuston ulkopuolelle):

Em. ohjelmat sekä tekemäni Tuataraan sisältyvä ohjelma antavat samalle numerosarjalle saman tarkisteen, kuten pitääkin, mutta eräissä muissa esimerkeissä esiintyvät tarkisteet poikkeavat näistä. Valitettavasti noissa tapauksissa on esitetty vain menetelmä ja tulos, muttei ohjelmakoodia tai konkreettista esimerkkiä algoritmin käytöstä, joten on vaikea sanoa johtuuko ero esim. kertotaulun toisenlaisesta järjestyksestä vai onko kyseessä virhe. Koska kuitenkin em. ohjelmista kaksi sisältyy kansainvälisessä käytössä olevan sovelluksen viralliseen määrittelyyn, olen valmis pitämään niiden (ja samalla tietysti oman ohjelmani) toimintaa oikeana.

Moduli 37

  1. Annetaan kullekin tarkistettavalle kirjaimelle numeerinen arvo passien yhteydessä esitetyn taulukon mukaisesti. Kaikille merkeille jotka eivät ole numeroita 0..9 tai kirjaimia A..Z annetaan arvo 36 (pieniä kirjaimia ei käytetä).
  2. Painotetaan tarkistettavia merkkejä oikealta alkaen kertoimilla 3, 1, 3, 1 jne.. Lasketaan tulot yhteen.
  3. Tarkisteen numeerinen arvo on luku, joka summaan on lisättävä jotta tulos olisi tasan jaollinen 37:llä.
    • Jos arvo on yksinumeroinen, se on tarkiste.
    • Jos arvo on 10..35, tarkiste on kohdassa 1 mainitun taulukon mukainen kirjain.
    • Jos arvo on 36, tarkiste on "#".
Tämä on yksi harvoista menetelmistä, joissa erikoismerkit otetaan huomioon. Niitä ei kuitenkaan tarkisteta tässä yksityiskohtaisesti, koska menetelmä on suunniteltu sovelluksiin, jossa erikoismerkkien lukumäärä, laji ja järjestys (mutta ei täsmällisiä positioita) on muuten tarkasti määritelty. Sovelluksia:
  • SICI - Serial Item and Contribution Identifier. Käytetään sarjamuotoisten julkaisujen yksittäisten ilmentymien (esim. aikakauslehden numero) ja niiden toimituksellisen sisällön (artikkelit, sisällysluettelot, hakemistot, tiivistelmät) yksilöintiin. SICI sisältää julkaisun ISSN-numeron.
  • BICI - Book Item and Component Identifier. Muistuttaa SICI:ä ja on sen pohjalta kehitetty, mutta käytetään kirjojen sisällön osien yksilöintiin. "#":n tilalla on "*". BICI sisältää julkaisun ISBN- tai ISBN-13 -numeron.
Esimerkki (SICI): 0011-3204(199804)39:2<193:CCBC>2.0.CO;2-O

Esimerkkinä oleva SICI voi jo sinänsä näyttää monimutkaiselta, mutta standardi on niin laaja ja sallii niin monenlaisia muunnelmia, etten edes yritä kuvata sitä tämän tarkemmin. Tarkisteen laskeminen vie niin paljon tilaa, että jätän sen lukijalle harjoitustehtäväksi.

SICI:llä tai BICI:llä yksilöitävän työn tunnisteena voi ennen julkaisua olla ISTC-koodi.

Kerroin 39

  1. Tarkistettavia numeroita painotetaan oikealta alkaen kertoimilla 3, 9, 3, 9 jne..
  2. Tulot lasketaan yhteen.
  3. Summa jaetaan 10:llä.
  4. Jakojäännös on tarkiste.
Menetelmää käytetään EAN-5:ssä (katso kohtaa Tuotekoodi), mutta siinä tarkiste on helposti luettavissa vain koneellisesti viivakoodista.


Liitteet


Jakojäännös ja kongruenssi

Jakojäännös

Tässä dokumentissa käytetään useassa kohdassa käsitettä jakojäännös, joka saattaa olla outo joillekin lukijoille. Jakojäännös (modulo, modulus, mod, remainder) löytyy funktiona tai operaattorina monista ohjelmoitavista laskimista ja lähes kaikista ohjelmointikielistä (uudemmissa operaattorina usein on C-kielestä periytyvä %-merkki, esim. "a = b % c", muissa usein "mod", esim. "a = b mod c", funktiona "a = mod(b, c)"). Näissä jakojäännös voidaan usein laskea desimaaliluvuilla ja myös negatiivisilla luvuilla, mutta tässä voidaan rajoittua käsittelemään ei-negatiivisia kokonaislukuja (0, 1, 2, 3 jne.).

Kokonaisluvuilla tehtävä jakolasku voi mennä tasan, eli esim. 48 / 6 = 8, jolloin jakojäännös on 0. Useimmiten jako ei mene tasan, jolloin jakojäännös poikkeaa nollasta, esim. 46 / 6 = 7 (kun desimaaleja ei käytetä) ja koska 6 × 7 = 42 ja 46 - 42 = 4, jakojäännös on 4. Jakojäännös on siis se osa jaettavasta joka jää jakamatta (eli jää jaossa "ylimääräiseksi"). Jakojäännös on aina vähintään nolla ja aina pienempi kuin jakaja. Huomaa erityisesti että kokonaislukujakolaskun jakojäännös ei koskaan ole desimaaliluku ja että osamäärää ei koskaan pyöristetä ylöspäin. Aina pitää myös paikkansa että

jakaja × osamäärä + jakojäännös = jaettava

jakojäännös = jaettava - ( jaettava / jakaja ) × jakaja

jossa "/" tarkoittaa kokonaislukujakolaskua. Katso myös "Jakojäännöksen laskeminen suuresta luvuista" alempana tässä kappaleessa.

Toisin kuin usein väitetään, jakojäännöksen voi satunnaisiin tarpeisiin laskea lähes millä tahansa taskulaskimella: Tehdään jakolasku, vähennetään tuloksesta kokonaisosa, ja kerrotaan alkuperäisellä jakajalla. Tulos on yleensä desimaaliluku, joka on hyvin lähellä kokonaislukua; tuo lähin kokonaisluku on oikea vastaus. Esimerkki: 283 mod 11 = ?

283 / 11 = 25,727272
25,727272 - 25 = 0,727272
0,727272 × 11 = 7,999992 eli 283 mod 11 = 8

Jakojäännöksen laskeminen suuresta luvuista

Suuren kokonaisluvun jakaminen jakojäännöksen laskemiseksi ei suoraan onnistu kaikilla ohjelmointikielillä. Tehtävä voidaan kuitenkin jakaa pienempiin osiin. Oletetaan ohjelmointikieli, jossa suurimmat kokonaisluvut ovat 32-bittisiä, jolloin voidaan käsitellä enintään 9-numeroisia lukuja (liukulukuja ei niiden luontaisen epätarkkuuden vuoksi pidä tässä yhteydessä käyttää jos käytettävä kieli tukee kokonaislukuja – useimmat tukevat; muussa tapauksessa kannattaa harkita kielen vaihtamista).

Esimerkkinä Kansainvälinen tilinumero: 15903000000776151800 on jaettava 97:llä siten, että halutaan tietää jakojäännös, mutta ei välitetä osamäärästä. Erotetaan jaettavan ensimmäiset 7 numeroa (1590300) ja jaetaan saatu luku 97:llä. Jakojäännöksen (82) jatkoksi liitetään 7 seuraavaa numeroa (0000776) ja saadaan uusi enintään 9-numeroinen luku (820000776). Tämä jaetaan taas 97:llä, ja liitetään jakojäännökseen (24) loput numerot (151800). Tuloksesta (24151800) lasketaan taas modulo 97 (61). – Tuatarassa on ohjelmakoodista esimerkki, joka on paljon tätä sanallista kuvausta lyhyempi (kaksi koodiriviä).

Sama menetelmä soveltuu myös muille jakajille ja pitemmillekin jaettaville. Sama periaate toimii vaikka suurimmat kokonaisluvut olisivat vain 16-bittisiä, mutta silloin suurimmat kerralla käsiteltävät luvut voivat olla enintään 4-numeroisia. Useimmat IBAN:it ovat sellaisenaan liian pitkiä jopa 64-bittisillä (18-numeroisilla) kokonaisluvuilla laskettaessa. Aina eivät riitä edes 128-bittiset kokonaisluvut; teoriassa jaettava voisi olla jopa 66-numeroinen.

Kongruenssi

Tässä dokumentissa käytetään paljon myös kongruenssin symbolia ≡ joka - samoin kuin sitä vastaava käsite - lienee useimmille lukijoille vielä oudompi kuin jakojäännös. Heti alkuun voin todeta lohduttavasti, että jos ymmärrät jakojäännöksen, kongruenssin ymmärtäminen ei ole yhtään vaikeampaa, mutta yritän nyt kuitenkin ensin selittää asian (lyhyesti) vaikeammalla ja "virallisemmalla" tavalla, ihan kuin olisin oikea matemaatikko: Jos a:n ja b:n erotus on tasan jaollinen m:llä, sanotaan että a ja b ovat kongruentteja modulo m, joka merkitään:

a ≡ b (mod m)

Tällä tiedolla sinänsä emme ole saaneet aikaan muuta kuin rahtusen lukuteoreettista yleissivistystä, mutta tämän dokumentin kannalta olennaisempaa on sama asia sanottuna toisella tavalla: Jos sekä a että b jaetaan m:llä, saadaan sama jakojäännös. Eli esim:

25 ≡ 3 (mod 11)

kertoo että kun 25 ja 3 (kumpikin erikseen) jaetaan 11:llä jakojäännös on sama - tässä tapauksessa 3. Huomaa että 25-3=22, joka on tasan jaollinen 11:llä. Yleisesti lausekkeessa voisi 3:n tilalla yhtä hyvin olla 14, 36 tai jokin muu äärettömän monista vaihtoehdoista, ja lauseke olisi edelleen matemaattisesti virheetön, mutta tässä dokumentissa jälkimmäinen luku on aina nimenomaan sama kuin jakojäännös, eli esimerkki voidaan lukea "kun 25 jaetaan 11:llä, jakojäännös on 3". Muutama huomautus on paikallaan:
  • Kongruenssin symbolia ei löydy kaikista fonteista, ja lisäksi Opera-selaimella näyttää olevan symbolin esittämisessä vaikeuksia; symboli näkyy oikein vain jos tekstin suurentaa järjettömän isoksi. Niille jotka eivät näe symbolia oikein kerrottakoon että se muistuttaa yhtäsuuruusmerkkiä (=), mutta päällekkäisiä viivoja on kolme.
  • Geometriassa tunnetaan myös kongruenssin käsite, mutta se tarkoittaa eri asiaa ja sille on hiukan erilainen symboli, jota en yritä näyttää koska se on vielä huonommin tuettu. Älä siis ihmettele, jos löydät samalle sanalle eri selityksen.
  • Samaa symbolia käytetään myös muissa merkityksissä, mm. kuvaamaan ekvivalenssia, joten älä ihmettele sitäkään jos löydät samalle symbolille eri selityksen.


Taulukot

Taulukko 1
A 10B 11C 12D 13E 14F 15 G 16H 17I 18J 19K 20L 21 M 22
N 23O 24P 25Q 26R 27S 28 T 29U 30V 31W 32X 33Y 34 Z 35


Vaihtoehtoinen tarkistusmenettely

Tarkisteiden tuottajat ovat harvassa; useammin halutaan tarkistaa syötetty tarkistusmerkki. Aina voidaan laskea tarkiste ja verrata sitä annettuun, mutta monessa tapauksessa pelkkä tarkistus on helpompi tehdä. Tällöin otetaan käsiteltäväksi koko tarkistettava merkkijono ml. tarkiste. Tehdään painotus, lasketaan summa ja jaetaan se ko. tietotyypin edellyttämällä tavalla. Jos jakojäännös on nolla, tarkiste täsmää. Yksityiskohdat vaihtelevat tarkistettavasta tiedosta riippuen:

Esimerkki 1: Y-tunnus 0989377-3
	 0  9  8  9  3  7  7  3
	 7  9 10  5  8  4  2  1
	 0 81 80 45 24 28 14  3  = 275 ≡ 0 (mod 11)
Esimerkki 2: ISBN 0-14-007621-2 (laskentatapa 2)
	 0  1  4  0  0  7  6  2  1  2
	10  9  8  7  6  5  4  3  2  1
	 0  9 32  0  0 35 24  6  2  2  = 110 ≡ 0 (mod 11)
Tietokoneella tai taskulaskimella luvun jaollisuus 11:llä voidaan tietenkin selvittää helposti. Muuten voidaan käyttää seuraavaa sääntöä: Poimitaan luvusta joka toinen numero ja lasketaan ne yhteen. Summataan erikseen loput numerot. Jos summat ovat samat tai niiden erotus on jaollinen 11:llä, alkuperäinen luku on myös jaollinen 11:llä. Esim. 275: 2+5=7 joten luku on tasan jaollinen 11:llä. Menetelmä on tietysti rekursiivinen. Lähde: Uusi Pikku Jättiläinen, s. 869, WSOY 1985, ISBN 951-0-12416-8.

Yllä esitettyä ei voi sellaisenaan soveltaa Moduli 97-10:en, jonka yksinkertaistettu tarkistus on kuvattu itse menetelmän yhteydessä, kuten Eurosetelin sarjanumeronkin. Kaikille menetelmille yksinkertaistettua tarkistusta ei ole.


Joitakin yleisiä havaintoja

Verhoeffin menetelmä ja jotkin standardiin ISO 7064 sisältyvät menetelmät ovat poikkeuksia, ja Moduli 11-11 vaatii pienen lisäyksen, mutta muuten jokainen edelläkuvatuista painotus-summaus-jakojäännös-menetelmistä voidaan esittää tavalla, joka on yhtäpitävä seuraavien sääntöjen kanssa:
  1. Kutakin tarkistettavaa merkkiä vastaava numeerinen arvo tai arvon kumpikin numero kerrotaan kertoimella, joka saadaan jollakin yksinkertaisella säännöllä kerrottavan positiosta.
  2. Tulot tai niiden numerot lasketaan yhteen.
  3. Summa jaetaan jollakin luvulla.
  4. Jakojäännös määrää tarkisteen joka liitetään tarkistettavaan merkkijonoon.
Kuten voidaan havaita, kaikki nämä tarkistusmenetelmät ovat periaatteeltaan melko yksinkertaisia. Hyvän tarkistusmenetelmän kehittämiseen tarvittava matematiikka on kuitenkin hyvin monimutkaista, joten sitä voidaan suositella vain matemaatikoille. Tätä dokumenttia varten on tutkittu useita muitakin menetelmiä kuin ne, joiden kuvaukset on otettu mukaan. Poisjätön syynä on ollut esim. tietojen puutteellisuus tai se ettei menetelmällä ole tiedossa olevia sovelluksia Suomessa, mikä tekee tietojen tarkistamisen vaikeaksi. Koska joku kuitenkin varoituksesta huolimatta haluaa kehittää oman menetelmän, tähän on koottu yhteenvetona kaikista tutkituista järjestelmistä sellaisia tietoja, joita ei mainita eo. yksittäisten järjestelmien kuvauksissa, joten nämäkään tiedot eivät mene lukijalta kokonaan hukkaan. Seuraavia asioita tarkastellaan:
  1. Tarkistettavan tiedon pituus
  2. Käytettävä merkistö
  3. Kirjainten numeroarvot
  4. Painokertoimet
  5. Jakaja sekä tarkisteen määräytyminen
    jakojäännöksen perusteella
  1. Mahdollinen lisätarkistus
  2. Tarkisteen paikka
  3. Muutosten ennakointi
  4. Yhteenveto
  5. Tarkisteiden historian
    hyvin lyhyt oppimäärä

Tarkistettavan tiedon pituus

Tarkistettava numerosarja / merkkijono ei saisi olla liian pitkä. Noin 20 merkkiä pitemmät merkkijonot pitäisi tarkistaa pienemmissä osissa (vrt. Passi) tai niissä pitäisi muuten käyttää useampaa kuin yhtä tarkistemerkkiä (vrt. Kansainvälinen tilinumero, RF-viite, IPI:n maksunaihekoodi). Pituus voi olla kiinteä (vrt. Henkilötunnus), vaihtuva (vrt. Pankkisiirron viitenumero) tai muuten vaihtuva mutta tarkistusta varten tieto muokataan kiinteämittaiseksi (vrt. Pankkitilin numero).

Yhden lähteen mukaan merkkijonon pidentäminen kahdella merkillä kasvattaa syöttövirheiden määrän kaksinkertaiseksi. Kannattaa siis pyrkiä tiiviiseen esitystapaan sekä varsinaisissa tiedoissa että tarkisteissa. Useamman kuin kahden tarkistemerkin käyttöön pitäisi olla hyvät perustelut.

Asialla on kuitenkin myös kääntöpuolensa. Joissakin sovelluksissa (esim. merkkitavaroiden sarjanumerot) on väärennösten vaikeuttamiseksi järkevää määritellä laaja koodiavaruus, josta käytetään vain pieni osa. Tällöin suurin osa oikean näköisistä koodeista voidaan todeta virheellisiksi sillä perusteella että ne eivät ole käytössä. Tämä on helppoa jos asia voidaan syöttövaiheessa tarkistaa tietokannasta, jossa on kaikki käytössä olevat koodit. Aina tämä ei ole mahdollista, ja silloin voidaan laatia salassapidettäviä ja vaikeahkosti havaittavia sääntöjä esim. tähän tapaan: "Jos numerosarjan neljäs numero on pariton, toisen ja viidennen numeron muodostaman luvun on oltava tasan jaollinen kuudella. Jos neljäs numero on parillinen ja kolmas numero on pariton, kuudennen numeron on oltava neljä yksikköä pienempi kuin kolmas numero, muuten kaksi yksikköä suurempi." Nämä rajaukset sulkevat pois 86.5 % koodiavaruudesta, mikä on varsin sopiva määrä, koska tällöin tietyn suuruisen käyttökelpoisen koodiavaruuden saavuttamiseksi koodin pituutta on kasvatettava vain yhdellä numerolla verrattuna tilanteeseen jossa kaikki koodit olisivat käytössä. Muunnelmia voi keksiä lähes rajattomasti, mutta tällaisten sääntöjen ei tietenkään ole tarkoitus korvata tarkisteen käyttöä. Huom! Menettely saattaa olla patentilla suojattu. (Vainoharhaisuuteen taipuvaisille on tässä hyvä kohde: Kuinka paljon on sellaisia asioita, jotka ovat vapaasti kaikkien nähtävissä, mutta joita eivät huomaa tai tunnista muut kuin asiaan vihkiytyneet.)

Samankaltaista menetelmää käytetään ilmeisesti myös luottokorteissa niin, että suuri enemmistö päällisin puolin oikean näköisistä (huonosti väärennetyistä) korttien numeroista osuu koodiavaruuden osaan, joka ei ole käytössä. Tämä on yksi syy siihen, että väärentäjät haluavat oikeiden korttien numeroita malleiksi.

Käytettävä merkistö

Kaikki tutkitut järjestelmät pystyvät käsittelemään numeroita, mutta aika usein on pystyttävä tarkistamaan myös sellaisia merkkijonoja, joissa on kirjaimia. Jos on mahdollista rajata käytettävää merkistöä, jätetään mielellään pois kirjaimet, jotka on helppo sekoittaa numeroihin. Esim. suomalaisen henkilötunnuksen tarkisteena ei käytetä kirjaimia G, I, O, Q ja Z. Myöhemmin on huomattu että käsin kirjoitettaessa myös U ja V, 4 ja Y sekä 5 ja S sekoittuvat helposti. moottoriajoneuvon sarjanumerossa ei käytetä kirjaimia I, O ja Q, vaikka järjestelmässä muuten käytetään runsaasti kirjainkoodeja. Eräästä toisesta järjestelmästä taas on jätetty pois I, L, O, S, Y ja Z. Hyvin harvat tutkituista järjestelmistä käyttävät muita kirjaimia kuin anglosaksisten aakkosten 26 isoa kirjainta A..Z, vaikka myös skandimerkkien, pienten kirjainten ja erikoismerkkien huomioon ottaminen on mahdollista (vrt. Verolipun numero, Moduli 37).

Kirjainten numeroarvot

Tarkistettavien kirjainten numeeriset arvot valitaan joskus siten, että ne eivät ole samoja kuin myöhemmin käytettävä jakaja tai sen monikerta. Esim. jos jakaja on 11, jätetään pois luvut 11, 22 ja 33 annettaessa kirjaimille numeerisia arvoja (vrt. Moduli 11-10). Kirjaimille annettavat arvot voivat olla myös yksinumeroisia (nollasta poikkeavia), jolloin eri kirjaimille tulee samoja arvoja, tai käytetään esim. arvoja 2..10 toistuvasti järjestelmässä jossa jakaja on 11.

Huom! Vaikka jokaiselle kirjaimelle annettaisiin oma numeerinen arvo, tällä on todellista merkitystä vain jos jakaja on suurempi kuin mikään annetuista arvoista (vrt. Moduli 97-10), mikä puolestaan voi aiheuttaa ongelmia jakojäännöksen käsittelyssä. Jos taas samoja numeerisia arvoja käytetään toistuvasti, kirjaimen tai numeron vaihtumista toiseksi ei aina huomata tarkistuksessa. Erillisessä kappaleessa on esimerkki sellaisista kirjainten numeroarvoista, joilla ongelmia voidaan vähentää. Moduli 37 ja Kansainvälinen tilinumero ratkaisevat ongelman käyttämällä riittävän suurta jakajaa.

Painokertoimet

Painokertoimien valinnasta on useita esimerkkejä edellisissä kappaleissa. Useimpia käytäntöjä voidaan helposti laajentaa mielivaltaisen pituisille merkkijonoille. Painokertoimet ovat tavallisesti pienempiä kuin myöhemmin käytettävä jakaja, mutta nollaa ei käytetä kertoimena, koska se estäisi merkin toiseksi vaihtumisen havaitsemisen. Kertoimien valinta on yksi tärkeimmistä menetelmän hyvyyteen vaikuttavista tekijöistä. Ilman kertoimia mm. kaikki numeroiden järjestyksen vaihtumiset jäisivät huomaamatta, samoin kuin nollien lisääminen tai poisjättäminen.

Ihanteellisessa tapauksessa painotuksen pitäisi aina tuottaa täydellinen permutaatio painotettavasta merkkijoukosta, eli kun kaikki mahdolliset tarkistettavat merkit painotetaan tietyllä kertoimella, tuloksena pitäisi olla arvojoukko, joka sisältää efektiivisesti erilaisia arvoja yhtä monta kuin alkuperäisessä merkkijoukossa on erilaisia merkkejä. Mm. Luhnin moduli 10, Moduli 10 ja Kerroin 137 täyttävät tämän vaatimuksen numerosarjoja tarkistettaessa, kun taas Kerroin 123 on hyvä huono esimerkki päinvastaisesta. Asiaa on helpointa valaista esimerkkien avulla:

Alkuperäinen numero0123 456789
Luhnin moduli 10, painokerroin 2024 6813579
Kerroin 5 antaisi yhtä hyvän tuloksen05 16273849
Esim. 3 olisi huono kerroin036 9369369
Menetelmässä Kerroin 137 3 on hyvä kerroin03 69258147
Samoin 7 (9 olisi yhtä hyvä)074 1852963
Mutta 5 olisi huono0505 050505
Samoin 2 (ja muut parilliset numerot)02 46802468
Muillakin kriteereillä asiaa voi tarkastella. Esim. menetelmässä Kerroin 137 (ja kaikissa sen sukulaisissa) voidaan havaita että jos kahden numeron erotus on 5, erotus on samansuuruinen vielä painotuksen jälkeenkin, josta seuraa että tällaisten numeroiden keskinäistä vaihtumista ei huomata (katso kohtaa Havaittuja heikkouksia).

Yhdessä menetelmässä kertoimina käytetään alkulukuja 2..53, joita kasvatetaan oikealta vasemmalle. Alkulukuja ovat positiiviset kokonaisluvut, jotka ovat tasan jaollisia vain 1:llä ja itsellään. Lukua 11 ei käytetä kertoimena vaan jakajana. Tarkistettavia merkkejä on 15, joten jokaisella on eri kerroin. Alkulukujen käytön kertoimina sanotaan minimoivan tapaukset, joissa kaksi virhettä kumoaa toisensa, jolloin virheellinen numerosarja näyttäisi virheettömältä.

Joissakin menetelmissä ei käytetä painokertoimia lainkaan. Esimerkkejä:

  • Tarkiste valitaan siten, että koko numerosarjan summa on tasan jaollinen 9:llä (vrt. Matkashekin sarjanumero) tai 10:llä.
  • Tarkistettavien numeroiden summa jaetaan 10:llä. Jakojäännös on tarkiste.
  • Tarkistettavien numeroiden summa jaetaan 9:llä. Jakojäännös on tarkiste. Sama jakojäännös saadaan jakamalla numeroiden muodostama luku 9:llä.
  • Summataan tarkistettavat numerot. Toistetaan tuloksen numeroiden summausta tarvittaessa kunnes tulos on yksinumeroinen. Lopputulos on tarkiste. Jos tarkisteeksi saatu 9 korvataan 0:lla, tarkiste on aina sama kuin edellisessä kohdassa.
Menetelmien etuina ovat yksinkertaisuus ja tarkisteen yksinumeroisuus, mutta koska tällaiset menetelmät pystyvät paljastamaan vain harvoja virhetyyppejä, ne soveltuvat lähinnä koneelliseen lukuun, jossa useimpia käsinsyötössä esiintyviä virheitä ei tapahdu. Samantyyppisiä menetelmiä käytetäänkin eräissä viivakoodeissa, kuten Code 39 ja Codabar. Todennäköisin virhe on yhden merkin vaihtuminen toiseksi kuten käsinsyötössäkin, ja sellaisen nämäkin menetelmät useimmiten paljastavat. Tämänkin virheen havaitseminen vaikeutuu, jos jakaja on lukujärjestelmän kantalukua pienempi (vrt. Havaittuja heikkouksia, kohdat Moduli 9 ja Moduli 7). Huomaa myös, että liian yksinkertainen menetelmä voi johtaa syöttövirheisiin, jos tietojen syöttäjä voi päässään laskien "korjata" sisällöltään virheellisen numerosarjan muodollisesti virheettömäksi.

On olemassa myös menetelmiä, joissa painokertoimia ei käytetä, mutta joissa sama vaikutus saadaan aikaan korvaamalla kukin numero ennen summausta toisella numerolla, joka katsotaan taulukosta. Oleellista on se, että eri numeropositioille käytetään eri taulukoita. Tällaisia menetelmiä käytetään ainakin eräissä UCC-12 -koodeissa (tavanomaisen tarkisteen lisäksi) ja italialaisissa pankkitilien numeroissa. Mikä tahansa painokertoimia käyttävä menetelmä voidaan myös kuvata tämän mallin mukaisesti.

Yhdessä esimerkkijärjestelmässä painokertoimet ovat desimaalilukuja, ja osa niistä negatiivisia. Tavoitteena on tehdä käytetyn järjestelmän selvittäminen mahdollisimman vaikeaksi. Osittain tämä tavoite voidaan saavuttaakin, mutta jos pätevä matemaatikko pääsee tutkimaan asiaa suuresta aineistosta, tällainen temppuilu on täysin hyödytöntä. Varjopuolena on lisäksi se, että painokertoimien valinnassa on oltava aivan poikkeuksellisen huolellinen, jos halutaan että järjestelmä hoitaa myös varsinaisen tehtävänsä, siis syötetyn numerosarjan tarkistamisen. Tavoite saavutetaan helpommin käyttämällä jotakin hyvää mutta harvinaista menetelmää (kts. Verhoeff), jos asiaa yleensä pidetään tärkeänä.

Jakaja sekä tarkisteen määräytyminen jakojäännöksen perusteella

Jakajana on usein 10 (tai yleisemmin sanottuna lukujärjestelmän kantaluku), mutta muissa tapauksissa käytetään yleensä alkulukuja, kuten 11, 31 tai 43. Jos merkistöksi valitaan numerot 0..9 ja kirjaimet A..Z, saadaan 36 merkkiä. Tällöin sopiva jakaja voisi olla esim. 37, joka on pienin käytettävien merkkien lukumäärää suurempi alkuluku (vrt. Moduli 37).

Jos jakaja on suurempi kuin 10, saadaan jakojäännöksiksi lukuja, joita ei voi kymmenjärjestelmässä suoraan esittää yhdellä numerolla. Tällöin on useita vaihtoehtoja:

  1. Jos lukujärjestelmän kantaluku on suurempi kuin 10, käytetään ao. lukujärjestelmän numeroita (vrt. Mod 11,10:n muunnelmat).
  2. Käytetään samaa numeroa edustamaan useampaa kuin yhtä jakojäännöstä; esim. jakajan ollessa 11, 0 vastaa myös jakojäännöstä 10 (vrt. Moduli 11-0, Moduli 11-5, Moduli 11-10).
  3. Varataan tarkisteelle enemmän kuin yksi positio. Tällöin jakaja voi olla vaikkapa 97 (suurin kaksinumeroinen alkuluku, vrt. Moduli 97-10).
  4. Ei käytetä merkkijonoja, jotka tuottavat ei-toivottuja jakojäännöksiä (vrt. Y-tunnus muunnelmineen, EINECS-numero, Moduli 11).
  5. Käytetään tarkisteina myös kirjaimia ja tarvittaessa erikoismerkkejä (vrt. Moduli 34, Moduli 31, Moduli 37).
  6. Keksitään jotakin muuta (vrt. Moduli 11-11)
Kohdassa 5 voidaan käyttää samaa muunnostaulua kuin annettaessa kirjaimille numeerisia arvoja, tai tarpeen mukaan tehdään erilainen muunnostaulu (Moduli 34). Jos jakaja on 11, on tavanomaista korvata jakojäännös 10 X-kirjaimella (= 10 roomalaisilla numeroilla, vrt. ISBN- ja ISSN-numerot). Eo. listan kohdissa 3..5 jakajan kasvattaminen parantaa menetelmän virheenpaljastuskykyä, jos jakaja on alkuluku.

Niissä tapauksissa joissa summataan tuloja eikä niiden numeroita (siis useimmiten), painokertoimia ja jakajaa valittaessa noudatetaan nähtävästi sellaista sääntöä, että jakajalla ei ykköstä lukuun ottamatta saa olla yhteisiä tekijöitä minkään painokertoimen kanssa. Tämä sääntö on automaattisesti voimassa jos jakaja on alkuluku ja kertoimet jakajaa pienempiä lukuja tai jakajaa suurempia alkulukuja, mutta jos esim. jakaja on kymmenen, viitosta ja parillisia numeroita ei yleensä käytetä kertoimina. Kerroin 123:n tutkiminen selittää miksi ei.

Ottaen huomioon mitä sanotaan kohdassa Käytettävä merkistö, käyttökelpoinen jakaja voisi olla esim. 23 (alkuluku), ja tarkisteena voitaisiin tällöin käyttää yhtä kirjainta A..Z jättämällä pois kirjaimet L, U ja V, mikä estää useimmat samankaltaisesta ulkonäöstä johtuvat sekaannukset. Samankaltaisuudesta kirjainten ja numeroiden välillä ei tarvitse välittää, jos numeroita ei käytetä.

Tanskalaisen henkilötunnuksen tarkistusnumero osoittaa myös henkilön sukupuolen. Tämä on ainoa tietämäni tapaus, jossa tarkisteella on kaksoismerkitys. On vaikea sanoa, mitä tämä vaikuttaa tarkistuksen tehokkuuteen; vaikutus voi olla neutraali tai kielteinen, mutta tuskin myönteinen.

Mahdollinen lisätarkistus

Eräissä järjestelmissä merkkijonoon lisätään merkkijonon pituuden (modulo 10) kertova numero, joka otetaan huomioon tarkistetta laskettaessa. Esim. jos tarkistettava tieto on 7235, tulos on 72356x, jossa x on tarkiste ja 6 on koko merkkijonon pituus ml. tarkiste sekä pituuden osoittava numero itse. Tämä lisänumero voi tietysti olla muussakin paikassa, ja eri järjestelmien välillä voi olla eroa siinä, otetaanko tämä numero ja tarkiste huomioon pituutta laskettaessa. Tarkistettavalla tiedolla voi olla minimipituus, jolloin tarvittaessa lisätään eteen nollia, jotka otetaan huomioon pituutta laskettaessa.

Tarkisteen paikka

Ylivoimaisesti yleisintä on sijoittaa tarkiste tarkistettavan merkkijonon loppuun, mutta yksittäisiä havaintoja on myös tapauksista, joissa tarkiste on alussa tai muiden merkkien välissä (vrt. Kansainvälinen tilinumero, RF-viite, IPI:n maksunaihekoodi, Islantilainen henkilötunnus). Tällaisia käytäntöjä kannattaa välttää, ellei niiden noudattamiseen ole erityistä syytä, sillä ne aiheuttavat ylimääräistä vaivaa, jos tarkisteellista tietoa halutaan joskus käyttää esim. lajitteluavaimena.

Muutosten ennakointi

Sen lisäksi että tarkisteet pidentävät syötettäviä merkkijonoja, niihin liittyy ainakin yksi muu ongelma: Tunnisteita ei aina osata suunnitella niin, että ne riittäisivät kaikkiin tuleviin tarpeisiin. Muutos tunnisteessa edellyttää usein muutosta myös tarkisteen laskennassa, mutta koska olemassaolevia tunnisteita ei yleensä voida muuttaa, laskennan muutos on suunniteltava niin, että yhteensopivuus vanhojen tunnisteiden kanssa säilyy. Tarkiste tekee siis tunnisteesta huonommin muutoksiin sopeutuvan. Ainakin seuraavat tapaukset voidaan erottaa:
  • Ongelmia ei yleensä synny, jos tunniste on jo alun perin vaihtuvamittainen, kuten pankkisiirron viitenumero.
  • Alun perin kiinteämittaiseksi määritellyn tunnisteen pidentäminen. Jos tämä voidaan hoitaa esim. lisäämällä vanhoihin tunnisteisiin nolla eteen, ja pidentämällä painokerrointen sarjaa vastaavasti, yhteensopivuus vanhojen tunnusten kanssa säilyy helposti. Tämä mahdollisuus kannattaa ottaa huomioon jo kerroinsarjaa ja sen käsittelyjärjestystä valittaessa (loogisesti jatkettavissa, käytetään oikealta vasemmalle). Näin on tehty esim. LY-tunnuksen (nykyisen Y-tunnuksen) kohdalla. ISBN-koodi taas on hyvä esimerkki tunnisteesta, jota ei voi tällä tavoin pidentää, joten tunnisteiden loppuminen aiheuttaa suuremman remontin (ISBN-13).
  • Merkistön laajentaminen. Jos tunnisteen jatkaminen ei ole helppoa, voidaan esim. alun perin numeroita 0..9 käyttävä tunniste muuttaa heksadesimaaliseksi tai aletaan muuten käyttää kirjaimia positioissa joissa aikaisemmin oli vain numeroita. Jos merkistön laajentaminen koskee myös tarkistetta, voidaan joutua ensin selvittämään onko tunniste uuden vai vanhan käytännön mukainen, ja sitten valitaan tarkisteen laskenta-algoritmi tämän mukaisesti. Tämä on kömpelöä, joten mieluummin on jo alusta alkaen valittava algoritmi, joka pystyy myöhemmin mukautumaan merkistön laajentamiseen ilman että alkuperäisen merkistön käsittely muuttuu. Tämän vaatimuksen täyttävät useimmat niistä tässä dokumentissa kuvatuista menetelmistä, jotka pystyvät käsittelemään kirjaimia A..Z, mutta joissa tarkiste on numeerinen.
  • Muista vaihtoehdoista oli hieno esimerkki 24.05.2000 Helsingin sanomien yleisönosastokirjoituksessa, jossa esitettiin miten henkilötunnusten 2040-luvulla uhkaava yksilönumeroiden loppuminen olisi estettävissä, jos tunnuksen välimerkki otettaisiin mukaan tarkisteen laskentaan. Idea oli, että "+" ja "-" saisivat laskennassa arvon 0 ja "A" saisi arvon 1. Tämä numero liitettäisiin tarkistetta laskettaessa syntymäajasta ja yksilönumerosta muodostetun luvun eteen ennen jakolaskua, jolloin vanhojen tunnusten tarkiste säilyisi ennallaan, ja kuitenkin 2000-luvulla voitaisiin käyttää uudelleen jo kertaalleen käytettyjä yksilönumeroita ilman sekaannuksen vaaraa. Tämä ratkaisu ilmeisine jatkokehitelmineen voisi riittää vuosisadoiksi. Ikävää että hyvä ajatus esitettiin viitisen vuotta liian myöhään.
Uudet tunnistejärjestelmät luonnollisesti suunnitellaan niin, että tunnisteet riittävät kaikkiin odotettavissa oleviin tarpeisiin. Pitemmällä aikavälillä voidaan saavuttaa merkittäviä säästöjä, jos järjestelmä onnistutaan suunnittelemaan siten, että se pystyy sopeutumaan myös ennakoimattomiin muutoksiin. Pankkiviivakoodin sisältö on esimerkki tapauksesta, jossa on sujuvasti pystytty ottamaan mukaan ympäristömuutos (siirtyminen markoista euroihin), vaikka koodin sisältöä suunniteltaessa Suomi ei ollut edes aloittanut neuvotteluja EU:n jäsenyydestä, ja myöhemmin sama järjestelmä on taipunut niin IBAN-tilinumeroiden kuin RF-viitteidenkin käyttöön. CUSIP:in laajentaminen CINS:iksi on myös kaunis esimerkki siitä, miten järjestelmään jätetään tilaa muutoksille.

Yhteenveto

Hyvä tarkistusmenetelmä paljastaa tavanomaiset virheet aina ja muut suurella todennäköisyydellä. Tavanomaisimpia virheitä ovat yhden merkin vaihtaminen toiseksi, yhden merkin poisjättäminen / lisääminen ja kahden vierekkäisen merkin vaihtaminen keskenään. Muut virhetyypit ovat merkittävästi harvinaisempia; niiden yhteinen osuus on vain n. 5 % kaikista virheistä. Yhden merkin poisto / lisäys havaitaan aina jos merkkijonon pituus on kiinteä, kuten henkilötunnuksen tai ISBN-numeron. Muissa tapauksissa havaittavuutta voidaan parantaa em. lisätarkistuksella.

Tavanomainen syöttövirhetiheys on yksi virhe n. 300 syötettyä merkkiä kohden. (Lähde: Viivakoodiopas, s. 4, Juha-Elektro Oy, 1989. Sama lukema löytyy useista muista lähteistä.) Määrä tuntuu pieneltä, mutta oppaassa tarkoitetaan ihmisiä, jotka ovat tottuneet tällaiseen työhön. Opas ei mainitse että numerosarjan pituus vaikuttaisi syöttövirheiden määrään (vrt. Tarkistettavan tiedon pituus).

Täydellistä varmuutta tällaiset tarkistusmenetelmät eivät koskaan anna: Täysin satunnainenkin merkkijono voi läpäistä tarkistuksen - jopa suuremmalla todennäköisyydellä kuin vain hiukan virheellinen. Jos tarkisteita on vain yksi, kahta merkkiä muuttamalla voidaan aina saada virheellinen merkkijono joka läpäisee tarkistuksen, mutta hyvää tarkistusmenetelmää käytettäessä tämä harvoin onnistuu vahingossa. Tahallista muutosta taas ei voida estää millään tämäntyyppisellä tarkistuksella, jos muuttaja tuntee tarkistusmenetelmän. Sama koskee koko tarkistettavan tiedon tuottamista RaHi-menetelmällä, josta monet tämän dokumentin sisältämät esimerkit ovat todisteina.

Tunnisteen muodollinen oikeellisuus ei siis takaa että tunniste todella on oikea. Tarkistusmerkin tutkiminen ja muut muototarkistukset ovat hyödyllisiä mm. siksi, että ne vähentävät tarpeetonta tietoliikennettä, ja auttavat havaitsemaan monia virheitä mahdollisimman aikaisessa vaiheessa, mikä helpottaa korjausta, mutta esim. muodollisesti virheetön y-tunnus ei takaa sitä, että tunnus on todella käytössä ja kuuluu sille organisaatiolle jolle sen sanotaan kuuluvan. Tällaiset asiat voi tarkistaa vain ao. tietokannasta.

Konekielisissä tiedoissa käytetään joskus tarkistuskoodeja, joiden avulla virheitä ei ainoastaan havaita, vaan osa niistä pystytään jopa korjaamaan automaattisesti (virheenkorjauskoodi, ECC, Error Correction Code). Tässä kuvatut tarkistukset eivät kuitenkaan siihen riitä, vaan käsin tehtävässä syötössä oikea tieto on löydettävä muulla tavalla. Katso kappaletta Hamming-koodi ja 10-järjestelmä jos rajoitetusti toimiva korjausmenetelmä kiinnostaa.

Matemaattisessa mielessä kaikkia tässä dokumentissa kuvattuja tarkisteiden laskentamenetelmiä voidaan nimittää yksisuuntaisen tiivistefunktion (one-way hash function) erikoistapauksiksi. Tätä kautta menetelmät ovat etäistä sukua salakirjoitukselle.

Mm. suomalaisen henkilötunnuksen välimerkki, postin lähetystunnuksen kaksi ensimmäistä ja kaksi viimeistä merkkiä, jotkin matkustusasiakirjoissa esiintyvät tietokentät ja islantilaisen henkilötunnuksen viimeinen numero jäävät tarkisteen laskennan ulkopuolelle. On selvää ettei tämä ainakaan lisää varmuutta tunnisteen oikeellisuudesta.

Älykäs vai tyhmä tunniste?

Tunnisteet voidaan karkeasti jakaa älykkäisiin ja tyhmiin. Kumpaakin käytetään avaimena, jolla tunnistettavan kohteen muut tiedot löytyvät esim. tietokannasta. Tyhmällä tunnisteella ei juuri muuta voi tehdäkään, koska se on yleensä pelkkä numerosarja, jonka millään osalla ei ole itsenäistä merkitystä, mutta älykäs tunniste kertoo kohteestaan jotakin myös suoraan, esim. suomalainen henkilötunnus sisältää henkilön syntymäajan. Usein tyhmä tunniste on ainoa mahdollinen, mutta monessa tapauksessa älykäs voi näyttää hyvältä ratkaisulta mm. siksi, että merkityksellisten numeroiden muistaminen on helpompaa kuin merkityksettömien. Älykkäiden tunnisteiden heikkous on kuitenkin niiden joustamattomuus: Tunnistetta ei aina voi helposti muuttaa, vaikka sen osana oleva tieto (esim. kirjan kustantaja ISBN-numerossa) vaihtuisi, jolloin älykkyys muuttuu painolastiksi. Tyhmää tunnistetta ei tarvitse muuttaa; riittää että sillä löytyvät muut tiedot päivitetään. Tämän vuoksi tyhmien tunnisteiden käyttö laajenee hitaasti älykkäiden kustannuksella. Älykäs tunniste voi olla hyvä valinta, jos kaikki sen osat ovat täysin pysyviä tai tunniste on helposti muutettavissa (esim. merikuljetuskontin numero). Tyhmä tunniste edellyttää yleensä yhtä keskitettyä rekisteriä, kun taas älykäs tunniste antaa helpohkon mahdollisuuden tietojen ja niiden ylläpidon hajauttamiseen, koska tunnisteesta voidaan päätellä mistä (esim. minkä maan) rekisteristä tietoja on etsittävä.

Esimerkkejä:
Älykäs: ISBN-numero, kemikaalin indeksinumero.
Tyhmä: Sähköinen asiointitunnus, ISWC-koodi.

Tarkisteiden historian hyvin lyhyt oppimäärä

Tarkisteen käyttö on yleensä mielekästä vain silloin kun tarkistus voidaan tehdä koneellisesti, joten ennen tietokoneita tarkisteet olivat harvinaisia, paitsi ehkä matemaattisissa teorioissa. Esim. Yhdysvalloissa otettiin vuonna 1936 eläketurvan järjestämiseksi käyttöön Social Security Number (SSN), jossa ei vieläkään (vuonna 2013) ole minkäänlaista virallista tarkistetta (jotkin organisaatiot lisäävät oman tarkisteensa, mutta yhtenäistä käytäntöä ei ole).

Kuitenkin viimeistään 800-luvulla arabimatemaatikot tunsivat jo Moduli 9:ä muistuttavan yksinkertaisen menetelmän, jota käytettiin peruslaskutoimitusten tulosten tarkistamiseen 1900-luvulle saakka. Kuvaavan suomenkielisen nimen "Yhteenlasku modulo 9" selvitti huhtikuussa 2006 Helsingin yliopiston matematiikan ja tilastotieteen laitos Helsingin kaupunginkirjaston iGS-palvelun toimiessa välittäjänä, mistä kiitokset molemmille. Muitakin samankaltaisia menetelmiä kehitettiin.

Varhaisin tiedossani oleva koneellinen sovellus on Elannon jäsennumero, jossa tarkiste otettiin käyttöön vuonna 1956, siis kaksi vuotta ennen kuin Postisäästöpankkiin tuli Suomen ensimmäinen kaupallis-hallinnollinen tietokone. Elannon järjestelmä toimi reikäkorttikoneilla, joita suomalaiset virastot ja yritykset olivat tuolloin käyttäneet jo yli 30 vuotta.

Laajemmmin tarkisteiden hyödyllisyys tietojen syötössä huomattiin kun tietokoneita alettiin käyttää kaupallisiin ja hallinnollisiin tarkoituksiin 1950-luvun lopulla. Saksalais-yhdysvaltalainen Hans Peter Luhn sai patentin menetelmälleen vuonna 1960, Suomessa alettiin jakaa työeläkekorttien numeroita 1962, alankomaalainen matemaatikko Jacobus Verhoeff julkaisi oman menetelmänsä 1969 ja ISO-standardin 7064 ensimmäinen versio julkaistiin 1983.

Uusia tarkistetta käyttäviä järjestelmiä suunnitellaan jatkuvasti.

Tämän dokumentin historia

Aloitin tämän dokumentin kokoamisen omaan käyttööni 1990-luvun alussa, lähinnä ajatellen että näitä tietoja tullaan tarvitsemaan ohjelmia kirjoitettaessa, ja oikeassa olinkin. Vanhin säilynyt versio on vuodelta 1996; siinä kuvataan viisi menetelmää ja kuusi sovellusta. Vähitellen menetelmien ja sovellusten keräämisestä tuli harrastus, ja dokumentti alkoi elää omaa elämäänsä, jossa edes potentiaalinen hyötykäyttö ei enää ollut tärkeää. Joitakin vuosia dokumentti oli vain muutaman henkilön käytettävissä, kunnes se vuonna 1998 siirrettiin Internetiin - tuolloin vielä pelkkänä ASCII-tekstinä ilman HTML-tageja ja nimellä "Tarkistusmerkkien laskentamekanismeja". Omalle kotisivulleni dokumentti siirtyi seuraavana vuonna, jonka jälkeen se on laajentunut n. kuusinkertaiseksi. Nykyinen nimi tuli käyttöön vuonna 2003.


Esimerkki kirjainten numeroarvoista

Mm. matkustusasiakirjoissa annetaan kirjaimille numeroarvot tarkisteen laskentaa varten, mutta menettely on hyvin kaavamainen. Arvot annetaan aakkosjärjestyksessä, ja vaikka ne ovat kaksinumeroisia, laskentamenetelmästä seuraa että vain viimeisellä numerolla on merkitystä. Matkustusasiakirjat on tarkoitettu luettaviksi koneellisesti, mutta käsin tehtävää syöttöä ajatellen valituksi tulleet arvot eivät ole parhaat mahdolliset. Parempaan tulokseen voidaan päästä ennakoimalla tavallisimmat yhden merkin virheet käsinsyötössä.

Tämän esimerkin arvoja valittaessa on otettu huomioon seuraavat asiat:

  • Käytetään kaikkia anglosaksisten aakkosten kirjaimia A..Z; isoille ja pienille kirjaimille ei anneta arvoja erikseen; muita kirjaimia, esim. ääkkösiä, käytetään tunnisteissa niin harvoin, ettei niitä tarvitse ottaa huomioon
  • Kirjainten numeroarvot ovat yksinumeroisia nollasta poikkeavia - tällöin on helppo soveltaa jotakin yleisesti käytettyä Moduli 10 tai Moduli 11 -tyyppistä menetelmää, joka tuottaa yksimerkkisen tarkisteen; nollaa on hyvä välttää mm. siksi, että eräät menetelmät eivät paljasta nollan ja jonkin muun numeron vaihtumista keskenään
  • Mitään numeroa ei käytetä kolmea kertaa enempää
  • Kirjaimen numeroarvo ei saa olla sama kuin QWERTY-näppäimistössä viereisen kirjaimen tai numeron
  • Toisiaan suomalaiselta äänneasultaan muistuttavilla kirjaimilla ei saa olla samaa arvoa - varsinkin puhelimessa voi tulla sekaannuksia (muissa kielissä ääntämisen ja näppäinjärjestyksen huomioonottaminen voi tietysti johtaa toisenlaiseen lopputulokseen)
  • Toisiaan ulkonäöltään muistuttavilla kirjaimilla ja/tai numeroilla ei saa olla samaa arvoa; ulkonäkötarkastelussa otetaan huomioon myös pienet kirjaimet ja pyritään ottamaan huomioon erilaiset fontit, (huolimattomasti) käsin kirjoitettu teksti yms.
  • Aakkosjärjestyksessä peräkkäisillä kirjaimilla ei tarvitse olla eri arvoja
Tulos aakkosjärjestyksessä
A 7B 7C 9D 1E 5F 8 G 4H 8I 5J 2K 6L 9 M 1
N 4O 2P 6Q 3R 3S 6 T 2U 1V 3W 4X 7Y 5 Z 8

Tulos numerojärjestyksessä
12345 6789
DMUJOTQRVGNWEIY KPSABXFHZCL

Kuten toisaalla on todettu, virhemahdollisuuksia voidaan vähentää myös jättämällä joitakin hankalimpia kirjaimia kokonaan pois, mutta tämä esimerkki on haluttu tehdä mahdollisimman yleiseksi.


Havaittuja heikkouksia

Kaikilla kuvatuilla menetelmillä on jokin heikkous, joka ei välttämättä vaivaa menetelmää edelläkuvatussa käyttötarkoituksessaan, mutta voi tehdä sen mahdollisissa muissa sovelluksissa, joten nämä asiat kannattaa ottaa huomioon menetelmää valittaessa. Huomaa että kun sama ongelma koskee useampia menetelmiä, kuvaus voi jossakin (yleensä ensimmäisessä) kohdassa olla pitempi kuin muualla. Joitakin tulkinnanvaraisia asioita on tietoisesti jätetty pois, eikä luettelo varmaan muutenkaan ole täydellinen.

MenetelmäOngelmat
Moduli 97-10Jakojäännöksen laskeminen yhdeksää numeroa pitemmistä luvuista voi olla ongelma joissakin ohjelmointikielissä. Kiertotie on kuitenkin olemassa, vrt. Jakojäännös ja kongruenssi, jossa kerrotaan myös miten lasketaan jakojäännös suuresta luvusta.
Tarkiste on kaksinumeroinen, mikä on liikaa joissakin sovelluksissa.
Moduli 34Yksittäisen merkin vaihtumista toiseksi ei aina huomata.
Painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää.
Vaikka 0:a ja 1:ä ei käytetä tarkisteina, toisiaan muistuttavat numerot ja kirjaimet aiheuttavat virheitä.
Moduli 31Jakojäännöksen laskeminen yhdeksää numeroa pitemmistä luvuista voi olla ongelma joissakin ohjelmointikielissä.
Y-tunnus muunnelmineen Painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää (mutta Mod 11-2 tekee kyllä hyvän yrityksen).
Tarkistetta ei voida laskea mille tahansa numerosarjalle.
ISBN- ja ISSN-numeroPainokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää, vaikka moottoriajoneuvon sarjanumerossa sitä yritetään (jossain määrin menetelmän tehokkuuden kustannuksella).
Moduli 11Menetelman joissakin versioissa painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää.
Tarkistetta ei voida laskea mille tahansa numerosarjalle.
Moduli 11-11Yksi tarkiste (0) vastaa kahta eri jakojäännöstä, mikä estää joidenkin virheiden havaitsemisen. Menetelmä on kuitenkin luultavasti parempi kuin useimmat joissa käytetään samaa metettelyä.
Moduli 11-0Painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää.
Yksi tarkiste (0) vastaa kahta eri jakojäännöstä, mikä estää joidenkin virheiden havaitsemisen.
Moduli 11-5Yksi tarkiste (5) vastaa kahta eri jakojäännöstä, mikä estää joidenkin virheiden havaitsemisen.
Moduli 11-10Yksi tarkiste (0) vastaa kahta eri jakojäännöstä, mikä estää joidenkin virheiden havaitsemisen.
Luhnin moduli 100:n ja 9:n vaihtumista keskenään ei havaita.
Peräkkäisten numeroparien - esim. päivämäärän osien - vaihtumista keskenään ei havaita. Vrt. Ruotsalainen henkilötunnus.
Moduli 10Kahden numeron vaihtumista keskenään ei havaita, jos niiden erotus on 5, eli esim. 8162 ja 8612 saavat saman tarkisteen.
Peräkkäisten numeroparien vaihtumista keskenään ei havaita.
Kerroin 137Kahden numeron vaihtumista keskenään ei havaita, jos niiden erotus on 5.
MatkustusasiakirjatKirjaimille valitut numeroarvot eivät ole parhaat mahdolliset. Tämän vuoksi yksittäisen merkin vaihtumista toiseksi ei aina huomata. Erillisessä kappaleessa on esimerkki vaihtoehdosta.
Kahden numeron vaihtumista keskenään ei havaita, jos niiden erotus on 5.
Kerroin 12Yksittäisen numeron vaihtumista toiseksi ei aina huomata.
Kahden numeron vaihtumista keskenään ei aina huomata.
Peräkkäisten numeroparien vaihtumista keskenään ei havaita.
Kerroin 234Yksittäisen numeron vaihtumista toiseksi ei aina huomata.
Painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää.
Kerroin 123Yksittäisen numeron vaihtumista toiseksi ei aina huomata.
Tarkisteen ja sitä edeltävän numeron vaihtumista keskenään ei huomata jos niiden erotus on 5.
Painokertoimien yleistäminen pitemmille numerosarjoille ei ole itsestään selvää.
Moduli 9 0:n vaihtumista 9:ksi tai päinvastoin ei havaita, eli esim. 2307 ja 2397 saavat saman tarkisteen.
Minkään numeroiden vaihtumista keskenään ei havaita.
0:n tai 9:n lisäämistä tai poistamista muiden numeroiden välistä ei havaita.
Kirjaimia käsiteltäessä havaitsematta jääviä muutoksia on hiukan enemmän.
Moduli 7Numeron vaihtumista toiseksi ei havaita, jos kyseessä on jokin seuraavista: 0↔7, 1↔8, 2↔9. Samojen numeroparien keskinäisiä paikanvaihtoja ei myöskään havaita.
Menetelmä on monia muita heikompi lisäysten / poisjättöjen havaitsemisessa.
Jakojäännöksen laskeminen yhdeksää numeroa pitemmistä luvuista voi olla ongelma joissakin ohjelmointikielissä.
Moduli 37Peräkkäisten numeroparien vaihtumista keskenään ei havaita.
Kerroin 39Kahden numeron vaihtumista keskenään ei havaita, jos niiden erotus on 5.
Peräkkäisten numeroparien vaihtumista keskenään ei havaita.

Yksittäisen menetelmän rajoituksia voi joskus kiertää käyttämällä kahta eri menetelmää jotka paikkaavat toistensa puutteet, mutta tällöin tarkisteitakin on kaksi tai useampia, kuten Luottokunnan myöntämissä luottokorteissa ja eräissä viivakoodeissa. Matkustusasiakirjoissa olisi ollut hyvä tilaisuus laskea yhteinen tarkiste eri menetelmällä (esim. Luhnin moduli 10) kuin yksittäisten kenttien tarkisteet, mutta mahdollisuutta ei ole hyödynnetty. Eräässä järjestelmässä 8-numeroiseen asiakasnumeroon on liitetty peräti neljä tarkistenumeroa: 1. lasketaan kuten ISBN-numerossa (asiakasnumerot valitaan niin että X-kirjainta ei tarvita), 2. ja 3. lasketaan Moduli 97-10:llä ja 4. Luhnin moduli 10:llä. Virheet on lähes täysin eliminoitu, mutta menettely on aika raskas. Käyttäjäorganisaatio kuitenkin sai mitä halusi.

Jonkinasteisella mielenkiinnolla voidaan todeta, että henkilökortin numero tarkistetaan kahdella eri menetelmällä yhteensä kolmeen kertaan, ja vielä sittenkin kahden numeron vaihtuminen keskenään jäisi useassa tapauksessa havaitsematta. Tosin vaihtuminen ei koneellisessa luvussa ole kovin todennäköinen, mutta tilanne muuttuu jos koneellinen luku ei jostain syystä onnistu, ja tiedot joudutaan syöttämään käsin.

Luhnin moduli 10:n tärkein puute voidaan kiertää välttämällä numerosarjoja, joissa 0 ja 9 esiintyvät vierekkäin, jos sovellus tämän sallii. Asia voidaan vielä erikseen tarkistaa tietoja syötettäessä. Samaa periaatetta voi soveltaa eräisiin muihin menetelmiin, mutta juuri tässä se toimii parhaiten.

Eri menetelmien suorituskyvystä näkee niin vaihtelevia arvioita, ettei alempana oleva taulukko luultavasti ole sen huonompi kuin muutkaan. Suurimmaksi osaksi arvio koskee vain numeroiden syötön tarkistamista. Kirjaimet vaikeuttaisivat arviointia joissakin tapauksissa kohtuuttomasti. Tämän vuoksi Coden on jätetty pois. Vain tavallisimmat virheet on otettu huomioon.

Olen muutaman kerran nähnyt väitteitä, joiden sisältö on suunnilleen seuraava: "Yhdellä tarkistusnumerolla voidaan havaita enintään 90 % virheistä, koska tarkisteelle on vain 10 vaihtoehtoa, ja siksi täysin satunnainenkin numerosarja läpäisee tarkistuksen 10 % todennäköisyydellä." Tällaisella havainnolla on merkitystä vain niille, jotka esim. laskua maksaessaan syöttävät saajan tilinumeroksi tai laskun viitenumeroksi satunnaisia numerosarjoja. Me muut yritämme syöttää täsmällisesti määrättyjä numeroita, ja vaikka tässä tehtävät virheet itsessään ovat satunnaisia, ne voidaan kuitenkin jakaa eri tyyppeihin, joiden esiintymistiheydet voidaan kokeellisesti selvittää, ja sitten voidaan kehittää tarkisteiden laskentamenetelmiä, joilla tavallisimmat virheet havaitaan mahdollisimman usein. Kuten allaolevasta taulukosta näkyy, hyvä tarkistusmenetelmä paljastaa yhdelläkin tarkistusnumerolla selvästi enemmän kuin 90 % tavallisimmista virheistä.

Havaitsematta jäävien virheiden osuus (%)
Menetelmä(t) Yhden numeron muuttaminen (3×) Vierekkäisten numeroiden vaihtaminen keskenään Yhden numeron lisääminen / poistaminen Painotettu keskiarvo
Moduli 97-10 0 0 1.0 0.20
Moduli 37 0 0 2.7 0.54
Moduli 31 0 0 3.2 0.64
Y-tunnus muunnelmineen
ISBN- ja ISSN-numero
Moduli 11
0 0 9.1 1.82
Verhoeffin menetelmä 0 0 10.0 2.00
Luhnin moduli 10
Mod 11,10
0 2.2 10.0 2.44
Moduli 11-0
Moduli 11-5
Moduli 11-10 *
1.5 1.9 10.6 3.40
Moduli 10
Kerroin 137
Matkustusasiakirjat
Kerroin 39
0 11.1 10.0 4.22
Kerroin 12 5.9 0.8 10.3 5.76
Kerroin 123 2.8 .. 11.1 1.2 .. 5.6 10.0 6.85
Moduli 7 6.7 6.7 20.0 9.36
Moduli 9 2.2
8.6
100.0 20.0
11.1
25.32
27.38

Yhden numeron muuttaminen on tavanomaisin virhe, joten sille on annettu kolminkertainen paino keskiarvoja laskettaessa. Tämä vastaa Jacobus Verhoeffin havaintoja eri virhetyyppien yleisyydestä. Muiden kuin näiden kolmen virhetyypin yhteinen osuus on vain n. viisi prosenttia kaikista virheistä.

* Prosenttiluvut koskevat todellisuudessa vain menetelmää Moduli 11-0, mutta Moduli 11-5 ja Moduli 11-10 ovat niin samankaltaisia, etten usko tulosten merkittävästi poikkeavan. Moduli 11-11 saattaa olla parempi tai huonompi, mutta en ole vielä tutkinut.

Kerroin 123:n tehokkuus riippuu monimutkaisella tavalla numerosarjan pituudesta. Ilmoitetut vaihteluvälit ja keskiarvo perustuvat 2..9 tarkistettavaan numeroon. Arviossa ei ole otettu huomioon sitä, että eräitä menetelmiä käytetään kiinteämittaisten tietojen tarkistamiseen, jolloin yhden numeron lisääminen / poistaminen havaitaan aina. Tarkoitus on verrata menetelmiä, ei sovelluksia. Kerroin 234:n tehokkuus on luultavasti suunnilleen sama kuin Kerroin 123:n, mutta tätä en ole yksityiskohtaisesti tutkinut.

Moduli 9:n kohdalla alemmat luvut koskevat tapausta jossa käytetään myös kirjaimia.

Huonokin tarkistusmenetelmä on tietysti paljon parempi kuin ei mitään, mutta huonolla menetelmällä laskettu tarkistusmerkki vie resursseja yhtä paljon kuin hyvällä menetelmällä laskettu, ajatellaanpa sitten laskentaan kuluvaa aikaa, muistin käyttöä tai ohjelman kirjoittamiseen tarvittavaa aikaa, joten miksi tyytyä huonoon kun hyviäkin on tarjolla?

On matemaattisesti todistettu, että mikään tarkistusmenetelmä, joka edustaa tässä dokumentissa kuvattuja painotus-summaus-jakojäännös -tyyppejä, joka ei aseta rajoituksia tarkistettavalle numerosarjalle, ja jossa tarkiste on yksittäinen kymmenjärjestelmän numero, ei voi paljastaa sekä kaikkia tapauksia joissa yksittäinen numero vaihtuu toiseksi, että kaikkia tapauksia joissa kaksi vierekkäistä numeroa vaihtuvat keskenään. Lähimmäksi pääsee Luhnin moduli 10. Muita yhtä hyviä menetelmiä voidaan kehittää, mutta parempi tulos edellyttää toisenlaista lähestymistapaa, kuten esim. Verhoeffin menetelmässä.

Aikaisemmin taulukon prosenttiluvut kuvasivat sitä, kuinka suuren osan virheistä menetelmä paljastaa, mutta nykyinen versio on mielestäni havainnollisempi. Nyt näkyy selvästi esim. se, että Luhnin moduli 10 - joka sentään on Moduli 10 -tyyppisistä menetelmistä paras - päästää läpi yli kymmenen kertaa niin paljon virheitä kuin Moduli 97-10, ja heikoin menetelmä on vielä yli kymmenen kertaa huonompi.


"Ihanteellinen" tarkistusmenetelmä

Käytännön tilanteet vaihtelevat, ja sen vuoksi mikään yksittäinen tarkistusmenetelmä ei voi olla paras joka tilanteessa. Tarkastellaan asiaa sen pohjalta, kuinka hyviksi eri menetelmät on todettu kappaleessa Havaittuja heikkouksia. Asetetaan joitakin rajauksia sille, millaiseen sovellukseen menetelmää halutaan käyttää:
  • Tarkistettava tieto ja tarkiste sisältävät vain numeroita 0..9. [Tämä on melko yleinen vaatimus. Jos tarkistetaan vain numeroita, mutta hyväksytään se että tarkiste saa joskus olla X-kirjain, ISBN-numeron tarkistus tai Mod 11-2 ovat sopivia yksimerkkisen tarkisteen tuottavia menetelmiä. Jos halutaan käsitellä myös kirjaimia A..Z, hyviä yksimerkkisen tarkisteen tuottavia menetelmiä ovat Mod 37-2 ja Mod 11,10:n muunnelma Mod 37,36. Vielä parempi on Moduli 97-10 jos ollaan valmiita käyttämään kaksimerkkistä tarkistetta. Jos nämä vaihtoehdot eivät miellytä, lue kappale Esimerkki kirjainten numeroarvoista, jossa kuvataan miten kirjaimet voidaan korvata numeroilla lisäämättä virhemahdollisuuksia merkittävästi, ja jatka sitten tästä kohdasta eteenpäin.]
  • Tarkistusmenetelmä ei saa asettaa rajoituksia tarkistettavalle numerosarjalle. [Jos tästä ollaan valmiita tinkimään, parhaita yksinumeroisen tarkisteen tuottavia menetelmiä ovat Y-tunnus muunnelmineen ja Moduli 11. Huomaa että tähän ryhmään eivät kuulu Moduli 11-0, Moduli 11-5, Moduli 11-10 ja Moduli 11-11.]
  • Tarkisteen on oltava yksinumeroinen.
Näillä ehdoilla paras on Verhoeffin menetelmä, jonka merkittävin heikkous on se, että numerosarjan pituuden muuttuminen jää havaitsematta 10 %:n todennäköisyydellä. Tällä ei tietenkään ole merkitystä, jos tarkistettava numerosarja on kiinteämittainen, jolloin mikään tavanomainen virhe ei jää havaitsematta, eli silloin tätä menetelmää voidaan suositella käytettäväksi sellaisenaan.

Jos numerosarja on vaihtuvamittainen, ja halutaan suurempaa varmuutta kuin mihin Verhoeffin menetelmä yksin pystyy, tarvitaan kaksi tarkistetta. Tällöin Moduli 97-10 on tietysti ilmeinen vastaus, onhan se Kansainvälisen standardointijärjestön ISO:n määrittelemä, ja em. taulukonkin mukaan paras löytämistäni menetelmistä. Silti on luvallista kysyä, voisiko tästäkin vielä parantaa, ja vastaus on myönteinen.

Kuten em. taulukosta havaitaan, parhaiden menetelmien heikoin kohta on numerosarjan pituuden muuttumisen jääminen havaitsematta, joskin pienellä todennäköisyydellä. Kappaleessa Mahdollinen lisätarkistus kuvataan tarkiste, joka kertoo numerosarjan pituuden (mod 10). Jos tämä tarkistus yhdistetään Verhoeffin menetelmällä laskettuun tarkisteeseen, ja oletetaan että molemmat tarkisteet ovat numerosarjan lopussa, voidaan todeta seuraavaa:

  • Havaitaan kaikki tapaukset, joissa yksi numero on vaihdettu toiseksi.
  • Havaitaan kaikki tapaukset, joissa kaksi vierekkäistä numeroa ovat väärässä järjestyksessä.
  • Jos yksi numero on lisätty tai poistettu
    • Havaitaan kaikki tapaukset joissa muutos ei vaikuta kahteen viimeiseen numeroon.
    • Havaitaan 99 % tapauksista, joissa muutos vaikuttaa kahteen viimeiseen numeroon.
Esim. jos tarkistettavia numeroita on kahdeksan (+ kaksi tarkistetta), lisäys jää havaitsematta todennäköisyydellä 2/11/100 = 0,18 %, poisto todennäköisyydellä 2/10/100 = 0,2 %. Kappaleen "Havaittuja heikkouksia" taulukossa tällainen menetelmä saisi siis lukemat 0, 0, ja 0,19, painotettu keskiarvo 0,038 %, eli jopa Moduli 97-10 päästää läpi yli viisinkertaisen määrän virheitä tähän verrattuna. Verhoeffin menetelmä on myös hyvä harvinaisempien virheiden havaitsemisessa. (Laskennallisesti menetelmä paranee jos numerosarja pitenee, mutta tätä ei kannata liiaksi painottaa, koska samalla virhemahdollisuudetkin kasvavat.)

Verhoeffin menetelmää pidetään joskus liian monimutkaisena. Jos sitä tästä syystä ei haluta käyttää, ilmeisin korvike on Luhnin moduli 10, jota vastaavalla tavalla käytettäessä em. lukemat ovat 0, 2,2 ja 0,19, painotettu keskiarvo 0,478 %, eli varsin hyvä mutta häviää kuitenkin Moduli 97-10:lle, joten tämä ei kelpaa ihanteelliseksi menetelmäksi. Mod 11,10 olisi täsmälleen yhtä luotettava, eikä auta laskennan yksinkertaistamisessa.

Lopputulos: Tehokkain tuntemani vaihtuvamittaisille numerosarjoille sopiva kaksinumeroinen tarkiste muodostuu siis seuraavista osista:

  1. Numerosta, joka osoittaa numerosarjan pituuden (mod 10), kuten on kuvattu kappaleessa Mahdollinen lisätarkistus. Tämä numero otetaan mukaan toista tarkistetta laskettaessa.
  2. Tavanomainen tarkiste, joka lasketaan Verhoeffin menetelmällä.
Esimerkki: Numerosarja 9946-30/244.18 jossa 1 osoittaa numeroiden lukumäärän (11 mod 10 = 1) ja 8 on Verhoeffin menetelmän mukainen tarkiste. Tätä voi kokeilla Tuatarassa.


Tarkisteita ei löydy kaikkialta

Tätä dokumenttia ensimmäistä kertaa lukeva voi hämmästyä siitä, kuinka laajasti tarkisteita käytetään, mutta ei niitä sentään ihan joka paikassa ole.
  • Autojen rekisterinumerot: Suomalaisissa rekisterinumeroissa ei ole tarkistetta, mutta joissakin maissa (esim. Singapore) sellaista käytetään. Tämä on luultavasti erityisen hyödyllistä jos rekisterinumeroita tunnistetaan koneellisesti automaattisessa liikenteenvalvonnassa, sillä tällaiseen tunnistukseen liittyy monia häiriötekijöitä.
  • Postipakettien jäljitykseen käytettävät lähetystunnukset: Suomessa otettiin huhtikuussa 2000 käyttöön uudet lähetystunnukset, joissa ei ole tarkistetta. Useissa muissa lähetystunnuksissa tarkisteita kuitenkin käytetään.
  • Puhelinnumerot: Jokainen huomaa varmasti, että jos puhelinnumeroissa olisi tarkiste, virhesoitot olisivat selvästi harvinaisempia kuin ne todellisuudessa ovat. Tarkisteen lisäämistä on suunniteltu ainakin Yhdysvalloissa, mutta toteutusta saadaan vielä odottaa, ehkä pitkäänkin.
  • Suomen markkojen sarjanumeroissa ei käytetty tarkisteita. Tarkisteita ei ole myöskään Yhdysvaltain dollareissa; tämä on todettu tutkimalla sekä vanhan- että uudenmallisia 20 dollarin ja uudenmallisia viiden ja kymmenen dollarin seteleitä. Englantilaisista vuoden 2000 mallisista 10 punnan seteleistäkään ei tarkisteita löytynyt. Sitä vastoin euroseteleissä on tarkiste ja tarkisteiden käytöstä joissakin muissa seteleissä on viitteitä.
  • Vakuutustunnukset (vakuutusnumerot): Ainakin joissakin tunnuksissa on tarkiste, mutta laskentamenetelmää en ole pystynyt selvittämään, paitsi Tapiolan kohdalla. Eri vakuutusyhtiöiden tunnukset ovat muodoltaan erilaisia, ja on luultavaa että mitään pankkitilien numeroiden tarkistukseen verrattavaa yhtenäistä käytäntöä ei ole olemassa.
  • Ympäristömerkki: Pohjoismaissa käytettävän Joutsenmerkin yhteydessä on usein lupanumero (kaksi kolmen numeron ryhmää) jossa ei ole tarkistetta.
Eräitä poikkeuksia lukuun ottamatta tarkisteen käytöstä seuraa, ettei voi olla kahta samaan järjestelmään kuuluvaa virheetöntä numerosarjaa, jotka poikkeavat toisistaan vain yhdessä positiossa. Näin ollen jos esim. muutamassa uudessa setelissä on peräkkäiset sarjanumerot, voidaan olla varmoja siitä ettei tarkistetta ole käytetty.


Avoimia kysymyksiä

On helppoa löytää tietoja joistakin tarkistusmenetelmistä ja niiden sovelluksista, mutta toisten kohdalla monet yksityiskohdat jäävät puutteellisiksi. Jos osaat antaa luotettaviin lähteisiin perustuvia lisätietoja jostakin tässä mainitusta avoimesta asiasta, ole hyvä ja lähetä tiedot sähköpostitse minulle niin saadaan ne muidenkin luettaviksi. Ilmoita myös saako nimesi mainita tässä dokumentissa.
  • IPI:n maksunaihekoodista on hyvät dokumentit, muttei aitoja esimerkkejä.
  • Millaisia yksilönumeroita käytetään 2000-luvulla annettavissa Henkilötunnuksissa? Vaikka asiasta on jotakin tietoa, yksityiskohdat puuttuvat. Millaisia suunnitelmia Väestörekisterikeskuksella on sitä väistämättä tulossa olevaa tilannetta varten, kun kolme numeroa ei enää riitä?
  • Onko Y-tunnuksella muita erikoistapauksia kuin Maatilatunnus ja aikaisemmin kuolinpesille ja yhtymille annetut 9-alkuiset numerot? Mitä? Erityisesti niitä voisivat olla 6- tai 7-alkuiset tunnukset, jos sellaisia on olemassa.
  • Rikosrekisterinumeron tarkisteen laskennasta ei ole käytettävissä mitään tietoja, eikä numeroista ole myöskään yhtään esimerkkiä.
  • X-tunnuksista kaivataan lisää esimerkkejä.
  • T-koodeista olisi hyvä löytää dokumentoitua tietoa.
  • Onko Tuotekoodilla tässä dokumentissa mainitsemattomia erikoistapauksia? Mitä? 980..982-alkuisista EAN-13 -koodeista tarvittaisiin esimerkkejä, mieluummin jossakin asiayhteydessä kuin pelkkinä numerosarjoina. Myös 99-alkuisten käytöstä olisi hyvä saada lisää suomalaisia esimerkkejä (muita kuin Plussa-pisteseteleitä).
  • Aidoista biometrisellä tunnisteella varustettujen passien koneellisesti luettavista riveistä ja takakannen viivakoodeista pitäisi saada esimerkkejä.
  • Uudenmallisten henkilökorttien takana olevista koneellisesti luettavista riveistä tarvittaisiin lisää aitoja esimerkkejä.
  • Tiedossa ei ole sekään, käytetäänkö ennakkoverolipun numerossa samaa tarkistusta kuin dieselverolipun numerossa tai miten dieselverolipun tapauksessa käsitellään skandimerkit.
  • Naudoilla on ihmisten henkilötunnusta vastaava syntymätunnus, joka näyttää sisältyvän nautojen EU-tunnukseen. Joissakin tapauksissa tunnukseen liitetään tarkiste, jonka laskentamenetelmä on Kerroin 137. Tarkempia tietoja tunnusten muodosta kaivataan, koska löydetyt dokumentit ovat sekavia. Muiden tuotantoeläinten vastaavista tunnuksista tietoja on vielä vähemmän.
Esimerkkejä pyydän siksi, että yksinkertaisemmissa tapauksissa riittävän monien aitojen esimerkkien tutkimisella voidaan suurelta osin korvata puutteelliset dokumentit. Lupaan olla käyttämättä tietoja väärin.


Valid HTML 4.0!   Pääsivu  Palaute   Valid CSS!

Ihmisten ei tarvitse välittää seuraavasta sanaluettelosta, joka on tarkoitettu vain hakukoneille. Tähän on koottu joitakin sanoja, jotka eivät muuten esiinny tekstissä perusmuodossa tai lainkaan, mutta joita joku voi käyttää etsiessään tässä dokumentissa kuvattuja asioita. Tähän ratkaisuun on turvauduttu, koska useimmat hakukoneet eivät enää ota huomioon sellaisia dokumenttien metatietoja, joilla sama asia on aikaisemmin voitu hoitaa. Sanat olisi voitu piilottaa näkyvistä tekemällä niistä samanvärisiä kuin tausta, mutta eräät hakukoneet jättävät sellaisetkin sanat vaille huomiota.

ajoneuvo auto automaattikortti elincs-numero euroseteli eu-tunnus kemikaali konttinumero latvia lentolippu liettua matkapuhelin matkashekki matkustusasiakirja merikuljetuskontti moottoriajoneuvo nainen pankkisiirto pankkisiirtolomake pankkitili puhelin rautatievaunu sim-kortti säästöpankki tarkasta tarkastaminen tarkastus tarkastusmenetelmä tarkastusohjelma tavarakoodi tavaravaunu vakuutustunnus verkkolasku verolippu

free hit counter

eXTReMe Tracker