Isikukood: erinevus redaktsioonide vahel

Allikas: Vikipeedia
Eemaldatud sisu Lisatud sisu
PResümee puudub
Tormit (arutelu | kaastöö)
88. rida: 88. rida:
|-
|-
|
|
<syntaxhighlight lang="php">
function validateCode($code){<br />
function validateCode($code){
$is = substr($code, strlen($code) - 1, 1);<br />
$is = substr($code, strlen($code) - 1, 1);
$shouldBe = 0;<br />
$shouldBe = 0;
<br />

// esimese astme skaala<br />
// esimese astme skaala
for($i = 1; $i < 11; $i++){<br />
$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 1, 1);<br />
for($i = 1; $i < 11; $i++){
$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 1, 1);
}<br />
}
$shouldBe = $shouldBe % 11;<br />
$shouldBe = $shouldBe % 11;

<br />
// teise astme skaala kui $shouldBe on võrdne 10ga<br />
// teise astme skaala kui $shouldBe on võrdne 10ga
if($shouldBe == 10){<br />
if($shouldBe == 10){
$shouldBe = 0;<br />
$shouldBe = 0;
for($i = 3; $i < 13; $i++){<br />
for($i = 3; $i < 13; $i++){
$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 3, 1);<br />
$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 3, 1);
}<br />
}
$shouldBe = $shouldBe % 11;<br />
$shouldBe = $shouldBe % 11;

<br />
// kui jääk on 10 siis muuda $shouldBe 0'ks<br />
// kui jääk on 10 siis muuda $shouldBe 0'ks
if($shouldBe == 10){$shouldBe = 0;}<br />
if($shouldBe == 10){$shouldBe = 0;}
}<br />
}

<br />
if($is == $shouldBe){return true;}<br />
if($is == $shouldBe){return true;}

<br />
return false;<br />
return false;
}<br />
}
</syntaxhighlight>
|}
|}


121. rida: 123. rida:
|-
|-
|
|
<syntaxhighlight lang="php">
function validatePersonalCode($code)<br />
function validatePersonalCode($code)
{ <br />
{
if(strlen($code) != 11 || !is_numeric($code)) return false;<br />
if(strlen($code) != 11 || !is_numeric($code)) return false;


$subcode = substr($code, 0, -1); <br />
$subcode = substr($code, 0, -1);
for ( $k = 1; $k <= 3; $k += 2 ) <br />
for ( $k = 1; $k <= 3; $k += 2 )
{ <br />
{
$s = 0;<br />
$s = 0;
for ( $i = 0; $i < 10; ++$i ) <br />
for ( $i = 0; $i < 10; ++$i )
{ <br />
{
$s += $k * $subcode{$i}; <br />
$s += $k * $subcode{$i};
$k = ( 9 == $k ? 1 : $k + 1 ); <br />
$k = ( 9 == $k ? 1 : $k + 1 );
} <br />
}
if ( ( $s %= 11 ) < 10 ) <br />
if ( ( $s %= 11 ) < 10 )
{ <br />
{
break;<br />
break;
} <br />
}
}<br />
}
if (substr($code, -1) != $s)<br />
if (substr($code, -1) != $s)
{<br />
{
return false;<br />
return false;
}<br />
}


return true;<br />
return true;
}<br />
}
</syntaxhighlight>
|}
|}



Redaktsioon: 25. detsember 2010, kell 02:26

Isikukood on riigi poolt kodanikele ning alaliselt riigis elavatele isikutele omistatav unikaalne numbrikombinatsioon. Isikukoodid moodustatakse eri riikides erinevalt. Isikukood kantakse isikut tõendavasse dokumenti.

Eesti isikukood

Eesti isikukood koosneb 11st numbrist, kus igal numbril on isikukoodi omaniku suhtes järgnev tähendus:

1. = sugu ja sünni nn. "sajand" (praegune vahemik 1...6)
2. ja 3. = sünniaasta (00...99)
4. ja 5. = sünni kuu (01...12)
6. ja 7. = sünnikuupäev (01...31)
8., 9. ja 10. = järjekorranumber samal päeval sündinute eristamiseks (001...659)
11. = kontrollnumber (0...9)

Andmekaitse Inspektsiooni selgitusel ei kuulu isikukood seaduse kohaselt delikaatsete isikuandmete hulka ja seega pole seda põhjust varjata enam, kui näiteks inimese nime või sünniaega.[1]

Sugu

Isikukoodi 1. number sisaldab infot nii omaniku soo kui sündimise nn. "sajandi" kohta (kuigi näiteks 19. sajand ei alga mitte aastal 1800, vaid 1. jaanuaril 1801).

Esimeseks numbriks on

  • „1“, kui 1800...1899.a sündinud mees
  • „2“, kui 1800...1899.a sündinud naine
  • „3“, kui 1900...1999.a sündinud mees
  • „4“, kui 1900...1999.a sündinud naine
  • „5“, kui 2000...2099.a sündinud mees
  • „6“, kui 2000...2099.a sündinud naine

Järjekorranumber

Isikukoodi 8., 9. ja 10. number on samal päeval sündinuid eristav järjekorranumber. Täpsemalt võttes on igal haiglal kahekohaline numbripaar ehk nn. tunnus, millest alates hakatakse igal uuel päeval vastsündinutele järjekorranumbreid andma. Näiteks, Viljandis (tunnus 60) sündinud päeva esimene tüdruk (ja ka poiss) saab järjekorranumbriks "601", teine samast soost laps "602" jne.

Haigla tunnus

Isikukoodi kolmekohalise järjekorranumbri kaks esimest numbrit näitavad, milline haigla on isikukoodi määranud. Arvatavasti võeti 1990.a. standardi loomisel haiglatele nende numbripaaride määramise aluseks sünnitusabi andvate haiglate tähestikuline nimekiri. Iga haigla ja järgmise vahele on jäetud 10...200 vaba järjenumbrit, et haiglatel oleks piisav varu isikukoodide jagamiseks (jäetud vabade kohtade arv on sõltuvuses elanike arvuga piirkonnas). Osa haiglaid (näiteks Põlva ja Võru haigla) jagavad sama tunnust.

Haiglate tunnused on järgmised:

00 = Kuressaare Haigla (järjekorranumbrid 001 kuni 020)
02 = Ida-Tallinna Keskhaigla, Hiiumaa, Keila, Rapla haigla (021...220)
22 = Ida-Viru Keskhaigla (Kohtla-Järve, endine Jõhvi) (221...270)
27 = Maarjamõisa Kliinikum (Tartu), Jõgeva Haigla (271...370)
37 = Narva Haigla (371...420)
42 = Pärnu Haigla (421...470)
47 = Pelgulinna Sünnitusmaja (Tallinn), Haapsalu haigla (471...490)
49 = Järvamaa Haigla (Paide) (491...520)
52 = Rakvere, Tapa haigla (521...570)
57 = Valga Haigla (571...600)
60 = Viljandi Haigla (601...650)
65 = Lõuna-Eesti Haigla (Võru), Põlva Haigla (651...710?)

Osa nimetatud haiglatest on praeguseks oma sünnitusosakonna sulgenud ja seega isikukoode enam ei määra. Nii suleti sünnitusosakond Tapal 1985.a, Haapsalus 2001.a, Jõgeval 2002.a ja Keilas 2004.a.

Tähele tuleb panna, et haigla number näitab haiglat, kus on lapse isikukood registreeritud, mitte seda, kus ta sündinud on (näiteks kodus sünnitaja saab oma lapsele isikukoodi ikkagi haiglast). Samuti on 1990.a isikukoodide esmasel registreerimisel antud täiskasvanutele isikukoode elukohale lähemal asuva haigla järgi, mitte tegeliku sünnikoha järgi.

Järjekorranumbrid praktikas

Eestis on erinevatel aastatel sündinud 12 000 (1998.a) kuni 25 000 (1987.a) last, mis teeb päevas 30...70 last ehk nii poisse kui tüdrukuid 15...35. Kolmandik ehk umbes 5...10 tüdrukut ja sama palju poisse sünnib Tallinnas, mis jätab ülejäänud Eestile päevas 10...20 samast soost last.

Väiksemates kohalikes haiglates sünnib seega päevas tavaliselt kuni 2 või 3 last. Seetõttu on näiteks enamik Viljandi haiglas sündinuist isikukoodi järjenumbriga "601" või "602" ning arvatavasti mitte kunagi ei ole antud näiteks järjekorranumbrit "647" (ehk 47.-s sündinu).

Võrdluseks, Tartus sündinud lapsel võib suurema tõenäosusega olla järjekorranumbriks näiteks "280" (ehk siis päeva kümnes samast soost laps), sest seal elab rohkem inimesi ja sünnib seega ka rohkem lapsi.

Kontrollnumber

Isikukoodi kontrollnumber formeeritakse "Moodul 11" meetodil, kasutades I või II astme kaalu:
I astme kaal: 1 2 3 4 5 6 7 8 9 1
II astme kaal: 3 4 5 6 7 8 9 1 2 3

Isikukoodi kümme esimest numbrit korrutatakse igaüks omaette I astme kaaluga, korrutised liidetakse. Saadud summa jagatakse 11ga. Kui jagatise jääk ei võrdu 10ga, on jääk kontrollnumbriks.

Kui jääk võrdub 10ga, siis korrutatakse koodi kümme esimest numbrit igaüks omaette II astme kaaluga. Korrutised liidetakse. Saadud summa jagatakse 11ga. Kui jääk ei võrdu 10ga, on saadud jääk kontrollnumbriks. Kui jääk võrdub 10ga, siis on kontrollnumber 0.

Näide: isikukoodi 37605030299 kontroll:
Summa = 1*3 + 2*7 + 3*6 + 4*0 + 5*5 + 6*0 + 7*3 + 8*0 + 9*2 + 1*9 = 108.
108 jääk jagamisel 11-ga on 9. (108/11 ~ 9,8. Täisosa on seega 9. Siit 9*11 = 99. Lahutades 108-99 = 9, mis ongi jääk).
Nii peabki isikukoodi 37605030299 viimane number olema 9.

Näited

Näide 1: Isik isikukoodiga 34501234215 on sündinud 23. jaanuaril 1945.a (...450123...). Ta on mees (3...), kelle isikukood registreeriti Pärnu haiglas (...42...) ning antud päeval oli ta esimene poisslaps (...1...). Isikukoodi kontrollnumbriks on 5 (...5).

Näide 2: Kui tütarlaps sündis 13. märtsil 1994 Põlvamaal, on tema isikukood suure tõenäosusega 49403136515, või kui ta oli sel päeval piirkonnas teine sündinud tüdruk, siis 49403136526.

PHP kood kontrollnumbri kontrollimiseks

Variant A.

	function validateCode($code){
		$is = substr($code, strlen($code) - 1, 1);
		$shouldBe = 0;

		// esimese astme skaala
		for($i = 1; $i < 11; $i++){
			$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 1, 1);
		}
		$shouldBe = $shouldBe % 11;

		// teise astme skaala kui $shouldBe on võrdne 10ga
		if($shouldBe == 10){
			$shouldBe = 0;
			for($i = 3; $i < 13; $i++){
				$shouldBe += ($i % 10 + intval($i / 10)) * substr($code, $i - 3, 1);
			}
			$shouldBe = $shouldBe % 11;

			// kui jääk on 10 siis muuda $shouldBe 0'ks
			if($shouldBe == 10){$shouldBe = 0;}
		}

		if($is == $shouldBe){return true;}

		return false;
	}

Variant B.

	function validatePersonalCode($code)
	{	
		if(strlen($code) != 11 || !is_numeric($code)) return false;

		$subcode = substr($code, 0, -1);  
		
		for ( $k = 1; $k <= 3; $k += 2 ) 
		{ 
			$s = 0;
		 
			for ( $i = 0; $i < 10; ++$i ) 
			{ 
			  $s += $k * $subcode{$i}; 
			  $k  = ( 9 == $k ? 1 : $k + 1 ); 
			} 
		 
			if ( ( $s %= 11 ) < 10 ) 
			{ 
			  break;
			} 
		}
		
		if (substr($code, -1) != $s)
		{
			return false;
		}

		return true;
	}

Viited

Välislingid