Tarkistusmerkkien laskentamenetelmiäEli melkein kaikki mitä olet aina halunnut tietää tarkistusmerkeistä,mutta et ole koskaan tullut kysyneeksi Copyright © Teppo Vuori 01.01.2024 Sisältö
JohdantoYleistä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. SovellusalaErilaisista 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.
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. VaroituksetVaikka 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 levitysEsitetyt 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 ajoittain 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:
Epäselvissä tapauksissa kannattaa ensin kysyä minulta. Palautesivu löytyy täältä. Palaute ja jatkokehitysKuvattuja 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.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 muutoksetTämä dokumentti ei ole kuollut, mutta on jo pitkään viettänyt hiljaiseloa: Teen kyllä edelleen muutoksia ja lisäyksiäkin, mutta yleensä vain silloin, kun jokin ulkoinen tekijä antaa niihin aiheen. Sitä vastoin dokumenttiin nähden rinnakkainen Tuatara-ohjelmapaketti on jatkuvasti aktiivisen ylläpidon alainen.
|
Moduli 97-10Menetelmää käytetään kansainvälisen tilinumeron ja siihen liittyvien RF-viitteen ja IPI:n maksunaihekoodin tarkistamiseen.Kansainvälinen tilinumero (IBAN)IBAN-muunnos- ja -tarkistusohjelmaKansainvä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:
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 sitä käyttävät kaikki Euroopan maat paitsi Venäjä. Kosovo käyttää epävirallista maakoodia XK 01.02.2015 alkaen. Euroopan ulkopuolella IBAN:ia käyttää kolmisenkymmentä maata; näihin eivät kuulu (marraskuussa 2018) 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), 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), Egypti (EG) ja Pakistan (PK) ovat ottaneet IBAN:in käyttöön. Käyttäjien määrä on muutenkin kasvussa – 13 uutta maata vuosina 2014..2018. Yhdysvalloissa on asetettu työryhmä asiaa selvittämään; jos tämä johtaa positiiviseen tulokseen, useat (kymmenet?) maat voivat seurata esimerkkiä. 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äättyi 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-viiteTarkisteen lisäys- ja tarkistusohjelmaJuoksevaan 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. Jossakin vaiheessa kotimaisista viitenumeroista luovuttanee, ja RF-viitteet jäävät ainoaksi vaihtoehdoksi. Varsinaista päätöstä tästä ei kuitenkaan ole vielä tehty (elokuussa 2014).
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 maksunaihekoodiRF-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:
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 34CodenCoden 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ä:
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:
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) → 3Esimerkki 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) → MHuom! 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 31Tätä menetelmää käytetään henkilötunnuksen, sähköisen asiointitunnuksen, kiinteistötunnuksen ja Tapiolan vakuutusnumeron tarkistamiseen.Suomalainen henkilötunnus (HETU)HETU:n tarkistusohjelmaHenkilö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:
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:
Esimerkki: 120464-126J
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. Kaikki teoriassa mahdolliset syntymävuoden ja yksilönumeron yhdistelmät eivät ole oikeasti käytössä. 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.
Säännöllinen lauseke (Regular expression, RegEx)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[-U-Y]|[0-2]\d[A-F])\d{3}[\dA-Z]$/ Luettavuuden parantamiseksi sama välilyönneillä ryhmiteltynä. Huomaa että tämä ei toimi kaikissa ohjelmointikielissä (ryhmät ovat päivä, kuukausi, vuosi & välimerkki, juokseva numero ja tarkiste): /^ (0[1-9]|[12]\d|3[01]) (0[1-9]|1[0-2]) ([5-9]\d\+|\d\d[-U-Y]|[0-2]\d[A-F]) \d{3} [\dA-Z] $/x Rajoituksia:
Henkilötunnuksen käyttö SuomessaIhmisestä 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:
Henkilötunnukset muissa maissaSuomalaista 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.
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 hyvin luultavasti vastustaa 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.
Sähköinen asiointitunnus (SATU)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ötunnusVä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):
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 vakuutusnumeroEri 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 → KMuiden vakuutusyhtiöiden mahdollisesti käyttämiä tarkisteita en ole onnistunut selvittämään.
|
ISBN- ja ISSN-numeroTuotekoodin 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-numeroISBN-numeron tarkistusohjelmaTä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 1Numeroita 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 2Tä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 = 2Esimerkki 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 → XEri 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-numeroISSN-numeron tarkistusohjelmaISSN = 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 = 1Suomalaisissa 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.
Moottoriajoneuvon sarjanumeroMoottoriajoneuvon 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:
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:
Kemikaalin indeksi- ja EINECS-numeroKemikaaleille 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 indeksinumeroKemikaalin 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-numeroTässä tarkastellaan kolmea tunnistejärjestelmää, jotka ovat läheistä sukua toisilleen:
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 = 7Tunnisteet 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 muunnelmineenY-tunnuksen muunnelmia ovat ALV-numero, EORI-numero ja OVT-tunnus.Y-tunnusY-tunnuksen tarkistusohjelmaYritys- 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 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) → 0Esimerkki 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) → 2Kertoimista 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-numeroSuomalaisen ALV-numeron tarkistusohjelmaALV-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 (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ä:
EORI-numeroSuomalaisen EORI-numeron tarkistusohjelmaEORI-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-9EORI-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-tunnusSuomalaisen OVT-tunnuksen tarkistusohjelmaOrganisaatioiden 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:
Minulle on kerrottu, että verkkolaskutuksessa organisaation osan tunnuksessa käytetään yleisesti kirjaimia, mikä on vastoin standardia. Tuatara-ohjelmapakettini keräämät tilastotiedot antavat väitteille jonkin verran tukea. Uskon, että standardinvastaisten tunnusten käyttöön on ainakin kolme syytä:
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 11Tä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ötunnusSeuraavat 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:
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) → 6Syntymävuoden kaksi ensimmäistä numeroa ovat pääteltävissä kahden viimeisen numeron ja yksilönumeron yhdistelmästä:
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, mutta 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ötunnusIslantilainen henkilötunnus kennitala on muotoa PPKKVV-NNTS, jossa
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) → 2Tunnus 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ötunnusHuom! 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:
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 = 3Eo. kuvaus poikkeaa useimmista muista tarkistusmenetelmistä, koska siinä käsitellään negatiivisia lukuja. Samaan tulokseen päästään tutummalta vaikuttavalla ja lyhyemmällä tavalla seuraavasti:
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 = 3Em. 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-11Virolainen ja liettualainen henkilötunnusVirolainen henkilötunnusVirolainen henkilötunnus isikukood (IK) on muotoa SVVKKPPNNNT jossa:
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ötunnusMm. 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-0Osuuspankin konttoritunnusOsuuspankkien 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):
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) → 0Osuuspankkien 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-5Postin lähetystunnusTä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:
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) → 5Esimerkki 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) → 5Huom! 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-10Merikuljetuskontin numeroISO-standardin 6346 mukaan merikuljetuksissa käytettävien konttien numerot ovat muotoa AAAU 999999-T, jossa:
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 = 9Algoritmin 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 = 0Tä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 viitenumerotKuljetuksen viitenumeroKuljetuksen 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:
Tulojen summa, jakojäännös ja tarkiste: 154031 mod 11 = 9 → 9
Vakuuden viitenumeroVakuuden 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:
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 10Tarkisteen lisäys- ja tarkistusohjelmaLuhnin 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:
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. 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 numeroIBAN-muunnos- ja -tarkistusohjelmaVaroitus! 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änyt 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 avattujen 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 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 ovat aina käyttäneet 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 → 6Jotkin osat tilinumerossa voivat kertoa esim. konttorin jossa tili on avattu, tililajin ja/tai asiakasryhmän (yhteisö / yksityinen), mutta nämä käytännöt vaihtelevat pankkiryhmittäin. Osuuspankeissa tilinumeron alkuosa sisältää erillisen tarkisteen. Suomalaisesta pankkitilin numerosta voidaan muodostaa kansainvälinen tilinumero IBAN, jolla myös on oma tarkisteensa.
Arvo-osuustilin numero ja X-tunnusMm. 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:
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 → 910-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 → 2Huom! 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 → 6X-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 CUSIPISIN = International Securities Identification Number, ISO 6166 -standardin mukainen kansainvälinen koodi, jota käytetään arvopaperien tunnistamiseen. Koodissa on 12 merkkiä:
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 → 4Kanadalaisilla 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 → 3CUSIP: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:
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 → 6Silja 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 → 8Monissa 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.
JakelukoodiKaikissa 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 → 1Jakelukoodilla 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-koodiT-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 → 9Hintalapussa 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 → 5Koodin 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 sarjanumeroKolmessatoista 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 → 6Kolme 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:
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 sarjanumeroGSM-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 → 1Usein 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 sarjanumeroEuroopan 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:
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 → 1Täydellinen koodiluettelo on kymmeniä sivuja pitkä, joten en edes yritä toistaa sitä tässä. Sarjanumeron ryhmittelyssä on vaihtelua ainakin seuraavasti:
Suomen rautateillä voi nähdä myös ulkomaisia vaunuja, useimmiten venäläisiä (maatunnus 20), joskus myös ruotsalaisia (74). Suomalaisten tavaravaunujen vanha numerointiEnnen 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-04 6 3 8 9 2 - 0 1 2 1 2 1 2 4 3 3 7 9 4 = 30 → 0Kansainvä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öintitunnusValitettavasti 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 → 0Huom! 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: 720310-1212
7 2 0 3 1 0 - 1 2 1 2 2 1 2 1 2 1 2 1 2 5 2 0 3 2 0 2 2 2 = 18 → 2Ruotsalaisten 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 2 1 0 0 3 - 1 2 1 2 2 1 2 1 2 1 2 1 2 5 2 2 0 0 3 2 2 2 = 18 → 2Suomalaisessa 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.
|
Moduli 10Menetelmää 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. TuotekoodiTuotekoodin 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:
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 rakenneEAN-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 kooditEAN-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ä:
SSCC-18:ssa 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-18:n edessä voi olla sovellustunnus (00). Samaa SSCC-18:aa ei saa käyttää uudelleen ennen kuin vuoden kuluttua edellisestä käyttökerrasta. SSCC-18 -koodattu kuljetuspakkaus voi sisältää pakkauksia, joiden päällä on EAN-14. EAN-13:n erikoistapauksiaTä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:
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ä:
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:
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. 984-alkuisesta koodista en löydä dokumenttia. 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. TarkistusNumeerinen 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 → 5Viimeisessä esimerkissä kannattaa huomata, että tarkisteen laskeminen suoraan tiivistetystä muodosta antaa väärän tuloksen. Tiivistetty koodi voidaan palauttaa alkuperäiseen muotoonsa seuraavasti:
Muita tietoja ja lisäkoodejaEAN-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.
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.
ISMN-numeroISMN (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 → 9Sama 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 → 9Vastaava 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-13ISBN-13:n tarkistusohjelmaISBN = 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äytettiin 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.
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 → 9Vastaava 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 137Menetelmää 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 viitenumeroTarkisteen lisäys- ja tarkistusohjelmaViitenumeroiden 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.
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:
6 1 7 4 3 5 4 1 3 7 1 3 7 6 3 49 4 9 35 = 106 → 4Tulojen 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 numeroPankkisiirron 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 → 4Tä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 numeroTä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:
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 → 8Rekisterinumero on siis VGA-256. Vastaava viitenumero on 2 34133 21711 25618.
|
MatkustusasiakirjatMatkustusasiakirjoja 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.
PassiViimeistää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----
Tarkisteiden laskenta: Tarkistettavia numeroita painotetaan vasemmalta alkaen kertoimilla 7, 3, 1, 7, 3, 1 jne.. Kirjaimille käytetään numeerisia arvoja 10..35 seuraavasti:
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→7Koko rivin tarkiste:
13846165<8FIN6506157F0110174150665<076R<<<78 7317317317 3173173 1731731731731731731731 7988812506 8508151 0730714750285007210007 =148→8Elokuun 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 passi21.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ä:
ViisumiSama 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ökorttiMaaliskuusta 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
Toisen rivin malli:
AAAAAATSVVVVVVTKKK<<<<<<<<<<<T ----+----1----+----2----+----3
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 → 4Standardi 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.
|
Kerroin 12Tä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:
1 1 3 8 5 7 4 2 2 1 2 1 2 1 2 2 1 6 8 10 7 8 = 42 → 2Menetelmä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 seurantanumeroUnited 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 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 → 2Tilan 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 234IMO-numeroIMO = 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:
7 6 2 5 8 1 1 7 6 5 4 3 2 49 36 10 20 24 2 = 141 → 1Menetelmä 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 123Tä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ä):
ISWC-koodiISWC = 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 → 3ISWC: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-numeroKemikaalin 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 → 9Lä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 10LounasseteliTä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 282Kun lasketaan yhteen sarjanumeron neljä viimeistä numeroa ja lisätään kymmenen, saadaan oikean reunan kaksi ensimmäistä numeroa, esimerkkisetelissä: 9 + 0 + 3 + 2 + 10 = 24Tä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 9Menetelmää 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 sarjanumeroAmerican 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 sarjanumeroEuroseteleitä on kaksi sarjaa.
Esimerkkejä: 20 €:n seteli X09093074411, 5 €:n seteli SE2041459102 ja 10 €:n seteli UC3009629701 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 S E 2 0 4 1 4 5 9 1 0 2 83 69 2 0 4 1 4 5 9 1 0 2 = 54 → 9 S E 2 0 4 1 4 5 9 1 0 2 83 69 2 0 4 1 4 5 9 1 0 2 = 180 → 9 U C 3 0 0 9 6 2 9 7 0 1 85 67 3 0 0 9 6 2 9 7 0 1 = 63 → 9 U C 3 0 0 9 6 2 9 7 0 1 85 67 3 0 0 9 6 2 9 7 0 1 = 189 → 18 → 9Esimerkeissä 1, 3 ja 5 on summattu ASCII-arvojen numerot, mikä on helpompaa käsin laskettaessa. Esimerkissä 2, 4 ja 6 on summattu itse ASCII-arvot, mikä taas on helpompaa tietokoneohjelmassa. Tarkiste voidaan laskea esim. seuraavalla kaavalla: tarkiste = (350 - summa) mod 9 + 1Jossa "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 53Huomaa 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:
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 tunnisteMuuntogeenisten 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:
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 = 3Huomaa 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 7Lentolipun sarjanumeroTä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 = 2Huomaa 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 = 1Monimutkaisemmilla 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 7064Varoitus! 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:
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ä:
Standardiin sisältyvät menetelmät ovat seuraavat (taulukossa "numero" tarkoittaa kymmenjärjestelmän numeroa 0..9 ja "kirjain" anglosaksisten aakkosten kirjainta A..Z):
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 ulkopuolisiin Verhoeffin menetelmään ja Dammin algoritmiin. Dokumentin muista pääkappaleista poiketen tässä pyritään keskittymään menetelmiin enemmän kuin sovelluksiin.
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-2Tä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:
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 → 8Kerroinsarja 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-2Tarkistus voi kohdistua numeroihin 0..9 ja/tai kirjaimiin A..Z. Laskenta:
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 → VDokumentissa 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,10Ohjelma Mod 11,10 -menetelmälle ja muunnelmillePerusmenetelmä 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:
tarkiste = ( (kantaluku+1) - viimeinen_välitulos ) mod kantaluku Esimerkki: Lasketaan tarkiste numerosarjalle 23743 (VT = välitulos, N = tarkistettava numero; muut otsikot viittaavat eo. listaan):
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. Tällä menetelmällä ja sen muunnelmilla on ominaisuus, jota useimmilla tässä dokumentissa kuvatuilla menetelmillä ei ole: Tarkiste vaihtuu myös tapauksessa, jossa tarkistettava numerosarja sisältää pelkkiä nollia, ja numerojono pitenee tai lyhenee yhden numeron verran. Testattu tapauksissa joissa kantaluku on 10, 16, 32 tai 36 ja tarkistettava numerojono on enintään 20-merkkinen. 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:
Esimerkki: 276 616 973 212 561 5 Mod 11,10:n muunnelmatMuutamista 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ä:
Menetelmä havaitsee tavallisimmat virheet seuraavasti:
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:
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-3Tämän heksadesimaalinumeroille tarkoitetun menetelmän sanotaan perustuvan standardiin ISO 7064, vaikka menetelmä ei sellaisenaan standardiin sisälly. Laskenta:
3 A - 7 7 1 . 2 3 10 7 7 1 ← Vastaava desimaaliluku 3 1 11 9 3 9 10 77 63 3 = 162 ≡ 2 (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:
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älleVerhoeff ää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. Katso myös Dammin algoritmi.
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ä:
Alankomaalainen matemaatikko Jacobus Verhoeff (1927-2018) 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 toinen kahdesta parhaasta tunnetusta yksinumeroisen tarkisteen tuottavasta menetelmästä (toinen on Dammin algoritmi, joka on samankaltainen, mutta yksinkertaisempi). 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):
Dammin algoritmiOhjelma Dammin algoritmilleAlgoritmin on esittänyt H. Michael Damm väitöskirjaansa liittyen vuonna 2004. Dammin algoritmi on yksinkertaisempi kuin Verhoeffin menetelmä, mutta muuten siitä voidaan sanoa pääosin samat asiat.
Algoritmi:
Katso myös "Ihanteellinen" tarkistusmenetelmä. Moduli 37
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
|
Liitteet
|
Jakojäännös ja kongruenssiJakojäännösTä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ä
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
Jakojäännöksen laskeminen suuresta luvuistaSuuren 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.
KongruenssiTä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:
|
Taulukot
|
Vaihtoehtoinen tarkistusmenettelyTarkisteiden 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:
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ä havaintojaVerhoeffin menetelmä, Dammin algoritmi 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:
Tarkistettavan tiedon pituusTarkistettava 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.
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 numeroarvotTarkistettavien 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.
PainokertoimetPainokertoimien 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:
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ä:
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 tai Damm), jos asiaa yleensä pidetään tärkeänä.
Jakaja sekä tarkisteen määräytyminen jakojäännöksen perusteellaJakajana 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:
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ätarkistusErä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 paikkaYlivoimaisesti 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 ennakointiSen 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:
YhteenvetoHyvä 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.
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, ja Damm julkaisi yksinkertaisen mutta tehokkaan algoritminsa vuonna 2004. Tarkiste voidaan laskea myös tekstistä, ja näin usein tehdäänkin, mutta silloin kyse on binäärisistä menetelmistä, jotka jäävät tämän dokumentin ulkopuolelle. Toisaalta jo esihistoriallisella ajalla runomuoto auttoi suullisen perimätiedon välittymistä mahdollisimman muuttumattomana sukupolvelta toiselle. Poljennolliset runomitat, kuten Kalevalassa, sopivat tähän erityisen hyvin, ja mahdollisten muutosten havaitsemista helpottaa kalevalainen tapa sanoa sama asia kahdesti eri sanoilla. 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 yli kuusinkertaiseksi. Nykyinen nimi tuli käyttöön vuonna 2003.
|
Esimerkki kirjainten numeroarvoistaMm. 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:
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 heikkouksiaKaikilla 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.
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ä.
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ä tai Dammin algoritmissa. 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ää:
Jos numerosarja on vaihtuvamittainen, ja halutaan suurempaa varmuutta kuin mihin Verhoeffin menetelmä tai Dammin algoritmi yksin pystyvät, 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ä tai Dammin algoritmilla laskettuun tarkisteeseen, ja oletetaan että molemmat tarkisteet ovat numerosarjan lopussa, voidaan todeta seuraavaa:
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. Sitä vastoin Dammin algoritmi on jotakuinkin yhtä hyvä kuin Verhoeffin menetelmä, mutta selvästi yksinkertaisempi. Lopputulos: Tehokkain tuntemani vaihtuvamittaisille numerosarjoille sopiva kaksinumeroinen tarkiste muodostuu siis seuraavista osista:
|
Tarkisteita ei löydy kaikkialtaTä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.
|
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.
|
|