Kennitala

**Kennitala**  er 10 tölustafa númer sem einstaklingar, félagasamtök, stofnanir og fyrirtæki nota á Íslandi til að auðkenna sig í viðskiptum og samskiptum við stofnanir, fyrirtæki og aðra einstaklinga.

## Saga
Núverandi kennitölukerfi var tekið upp á áramótum 1987–1988, en áður var notast við nafnnúmer. Nafnnúmerakerfið byggðist á því að raða nöfnum landsmanna í stafrófsröð. Gamla kerfið hafði ýmsa galla, t.d. varð númerabreytingar þörf ef einstaklingur breytti um nafn. Auk þess var töf á að nýfædd börn fengju nafnnúmer, þar sem bíða þurfti eftir að viðkomandi fengi nafn. Á árunum eftir 1980 leiddi skortur á númerum til endurnotkunar á númerum látinna einstaklinga, sem olli stöku sinnum vandamálum í heilbrigðis- og menntakerfinu.

## Uppbygging
Kennitalan er samanstendur af 10 tölum á forminu DDMMÁÁ-NNPÖ þar sem DD er dagurinn, MM er mánuðurinn, ÁÁ eru síðustu tveir stafirnir í fæðingarárinu, NN er handahófskennd tala, P er prófsumma sem er reiknuð út frá fyrstu átta tölunum og Ö táknar öldina. Kennitölur fyrirtækja (og annarra lögaðila) þekkjast á því DD hlutinn er alltaf hærri en hjá einstaklingum, því tölunni 40 er alltaf bætt við hann og verður fyrsti stafurinn þar af leiðandi alltaf 4, 5, 6 eða 7.
### Fyrstu átta stafirnir
Fyrstu 6 stafir kennitölu eru myndaðir af fæðingardagsetningu einstaklings. Ef um félagasamtök, stofnun eða fyrirtæki er að ræða er notuð stofndagsetning en fyrsta talan er hækkuð um 4.

Dæmi:
* Einstaklingur fæddur 12. janúar 1960 fær fyrri hlutann 120160
* Einstaklingur fæddur 17. júní 2007 fær fyrri hlutann 170607
* Fyrirtæki stofnað 17. júní 2007 fær fyrri hlutann 570607

Næstu tveir stafir kennitölunnar er raðtala, nær alltaf 20 eða hærri, valin við fæðingu.

### Níundi stafurinn
Níundi stafur kennitölunnar er kölluð vartala. Hún hefur frá upphafi verið reiknuð á neðangreindan hátt, en frá árinu 2026 eða 2027 má búast við að þetta breytist, sjá kaflann Raðnúmer að neðan.

Vartalan virkar sem ákveðin prófsumma sem er fengin með því að beita ákveðnu reikniriti á fyrstu 8 tölurnar. Fyrstu átta tölurnar eru margfaldaðar með tölunum 3, 2, 7, 6, 5, 4, 3 og 2 frá vinstri til hægri, margfeldin eru svo lögð saman og módúlus 11 fundinn af summunni, þessi módúlus er svo notaður sem níundi stafurinn. Þannig er hægt að athuga hvort að kennitala sé löglega mynduð og hafna kennitölum sem slegnar eru inn sem ekki standast þetta vartölupróf.

Dæmi hvernig reikna ætti út níunda staf kennitölu einstaklings sem byrjar á 120160 og hefur handahófskenndu stafina 33.

Fyrst eru fyrstu átta tölurnar margfaldaðar með fyrirframákveðinni talnarunu:
:( 1\times 3 ) + ( 2\times 2 ) + ( 0\times 7 ) + ( 1\times 6 ) + ( 6\times 5 ) + ( 0\times 4 ) + ( 3\times 3 ) + ( 3\times 2 ) = 58

og þar sem
:58 = 11 \times 5 + 3

þar sem 58\bmod 11 er samleifa
: 58\bmod 11  \equiv 3\,

þar sem samleifin (módúlus) er 3. Ef samleifin er 0, þá er vartalan 0. 

Annars ef samleifin er ekki 0, er samleifin dregin frá tölunni ellefu til að fá út vartöluna.
:  11 - 3 = 8 

### Tíundi stafurinn
Tíundi og síðasti stafur kennitölunnar táknar öldina sem aðilinn er fæddur eða stofnaður:
*8 er 19. öldin eða árabilið 1800-1899
*9 er 20. öldin eða árabilið 1900-1999
*0 er 21. öldin eða árabilið 2000-2099

### Forritunardæmi
Hérna er dæmi um klasa-fall (e. class method) í TypeScript sem athugar hvort kennitala sé á réttu formi en amast ekki við því ef kennitölustrengurinn er tómur:
```typescript
public islSSNValidate(ssn: string) : boolean {
        if (typeof ssn !== 'undefined' && ssn != null && ssn.length > 0) {
            ssn = ssn.trim().replace('-', '').replace(' ', '');
            if (ssn.length != 10)
                return false;
			var sSum =
				(3 * parseInt(ssn.substr(0, 1))) +
				(2 * parseInt(ssn.substr(1, 1))) +
				(7 * parseInt(ssn.substr(2, 1))) +
				(6 * parseInt(ssn.substr(3, 1))) +
				(5 * parseInt(ssn.substr(4, 1))) +
				(4 * parseInt(ssn.substr(5, 1))) +
				(3 * parseInt(ssn.substr(6, 1))) +
				(2 * parseInt(ssn.substr(7, 1)));
			var modRes = sSum % 11;
			if (modRes > 0)
				modRes = 11 - modRes;
			if (modRes != parseInt(ssn.substr(8, 1)))
				return false
			var century = parseInt(ssn.substr(9, 1)); 
			if (isNaN(century) || (century != 0 && century != 9 && century != 8)) 
				return false;
        }
        return true;
    }
```


## Gallar kennitölunnar

### Harðkóðun aldarinnar
Þegar á að staðfesta að kennitala sé í réttu formi þá er mikilvægt að vita að það er síðasti tölustafurinn sem gefur til kynna á hvaða öld manneskjan er fædd. Ástæða fyrir mikilvægi þess er að í kennitölunni er ártalið á stuttu formi, þ.e. ef manneskjan er fædd 2018 inniheldur kennitalan aðeins tölustafina 18. Ef síðasti tölustafurinn er 9 gefur það til kynna að manneskjan hafi fæðst á 20. öld og 0 þýðir að manneskjan hafi fæðst á 21. öld. Svo ef manneskjan er fædd árið 18 og síðasti stafurinn er 9 er manneskjan fædd 1918. Ef síðasti stafurinn er 0 er manneskjan fædd 2018.

Forritarar eru flestir sammála því að þeir eigi að skapa kóða sem rennur ekki út. Sem sagt að kóðinn sem þeir skrifa gæti virkað í dag og eftir 1000 ár. Kennitalan á þessu formi eins og við notum á Íslandi í dag gerir það að verkum að þegar kennitöluformið er staðfest þá þarf forritarinn að harðkóða aldirnar inn í forritið.

Ef það á að staðfesta að kennitalan 0101302129 sé á réttu formi þá þarf að vera skilgreint að ef tíundi stafurinn sé 9 þá skal sett 19 fyrir framan ártalið. Forritarinn gæti skilgreint eða harðkóðað nokkrar aldir fram í tímann en betra væri að kennitalan innihaldi þessar upplýsingar svo forritið gæti verið sjálfbært við að finna nákvæmt ártal án þess að forritarinn gæfi því auka upplýsingar sem síðan renna út að lokum.

Sem dæmi, ef forritari skilgreinir aðeins að**:**

1. Ef síðasti tölustafurinn er 9 er sett 19 fyrir framan ártalið

2. Ef síðasti tölustafurinn er 0 er sett 20 fyrir framan ártalið

þá virkar sami kóði ekki þegar hann er keyrður með kennitölu á persónu sem fæðist árið 2100 því þá verður síðasti stafurinn 1 (Sjá forritunardæmi.). En vert er að nefna að yrði síðasti stafurinn 1 þá gæti kennitalan staðið fyrir 12. öld (árin 1100-1200) eða 2. öld. (árin 100-200) nema inn komi skilgreining frá forritara sem mun hætta að virka rétt eftir ákveðinn tíma.

Til þess að forritið gæti verið algjörlega sjálfbært væri hægt að leysa þetta vandamál á þann veg að kennitölunni yrði breytt þannig að ártalið væri á lengra formi og hætt væri að nota síðasta stafinn, t.d. 0101**1930**-212. Einnig væri hægt að bæta einum staf fyrir framan síðasta stafinn, t.d. 010130-212**19**. Í seinni breytingunni þyrfti ekki að breyta útreikningi vartölu.

### Aðgangur að þjóðskrá
Til að staðfesta kennitölu er hægt að leita í þjóðskrá. Tenging við hana fer í gegnum þriðja aðila og greiða þarf fyrir aðgang . Þá þarf að gera grein fyrir því að látið fólk kemur ekki upp við leit í þjóðskrá.

### Raðnúmer
Annar mögulegur vandi við kennitöluna er að hún gengur út frá því að ekki fleiri en 73 einstaklingar með kennitölu eigi sama fæðingardag. Það er vegna þess að fyrstu tvær tölurnar af þeim fjórum síðustu er raðnúmer, tala frá 20-89, og níunda talan sem reiknuð er út frá hinum getur ekki verið 10. Þar sem meðaltal fæðinga á dag á Íslandi er rúmlega 11 þá mun þetta ekki vera vandamál á komandi árum.

Árið 2025 var ákveðið að kerfiskennitölur og kennitölur einstaklinga verði án útreiknaðrar vartölu, þ.e. níundi stafurinn geti þá verið hvaða tölustafur sem er og kennitala standist því ekki hefðbundið vartölupróf. Þann 18. febrúar 2026 hófst miðlun á 6 tímabundnum prufukennitölum sem standast ekki vartölupróf, en það er óákveðið hvenær raunveruleg úthlutun svona kennitalna hefst. Tölvukerfi sem nota vartölupróf til að sannreyna kennitölur munu eftir það hafna flestum nýjum kennitölum.

## Heimildir


## Tengt efni
* Nafnnúmer

## Tenglar
* 
* Texti um kennitölur á vef Hagstofunnar. 
* Grein eftir Ian Watson um sögu persónueinkenna á Íslandi.
* Forrit á github til að sannreyna kennitölur