Arutelu:Isikukood

message: Number on arvu märk, tähis. Isikukood ongi seepärast kood, et seal on nii numbreid kui arve, muidu saaks ju rääkida isikunumbrist. Isikukoodis on numbrid need, mis tähistavad sugu, kõik ülejäänud on arvud, sest nad on loendamise või arvutamise tulemused. Inglise sõna ''digit'' on eesti keeles number, inglise sõna ''number'' on eesti keeles arv (enamasti). Paraku on ka seaduses kirjas kontrollnumber, mis minu arvates on küll kontrollarv, sest see ju arvutatakse. [[Kasutaja:Valju|Valju]] 7. märts 2007, kell 22:53 (UTC)

message: Kas on mõtet lisada, et Isikukood ei kuulu delikaatsete isikuandmete hulka Eesti Vabariigis?
* ISIKUANDMETE KAITSE SEADUS @ eRT kehtib kuni 31. dets. 2007
* ISIKUANDMETE KAITSE SEADUS @ eRT khtib alates 01. jaan. 2008
suwa 5. august 2007, kell 14:17 (UTC)
replies: text: Võib koos viitega lisada lause:  "Isikukoodi töötlemine on lubatud ilma andmesubjekti nõusolekuta, kui isikukoodi töötlemine on ette nähtud välislepingus, seaduses või määruses." Andres 6. august 2007, kell 07:05 (UTC)
replies: text: : Selle lause peaks kantseleikeelest tõlkima eesti keelde. Valju 6. august 2007, kell 07:14 (UTC)
replies: text: :: Mina seda ei oska. Andres 7. august 2007, kell 03:56 (UTC)
replies: text: ::: Mingi kantseliidi teisendamise katse aruteluks on järgnev:

text: ::: EV kodaniku/alalise elaniku Isikukoodi kasutamine andmehulkades/andmebaasides on lubatud ilma

text: ::: tema nõusolekuta kui säherdune kasutamine on kooskõlas seadustega (ISIKUANDMETE KAITSE SEADUSega)???

text: ::: suwa 7. august 2007, kell 14:14 (UTC)
replies: text: :::: Siin ei ole sisulist selgitust. Niisugune ümbersõnastamine teeb ainult mõtte ebatäpsemaks. Parem juba originaali tsiteerida koos linkidega. Andres 7. august 2007, kell 19:25 (UTC)
replies: text: ::::: Mis sel originaalil siis viga on? Äärmisel juhul võiks sõna "töötlemine" lahti mõtestada... ma ei tea, mina saan sellest selgitusest küll väga hästi aru, aga no keskmine eestlane on veits juhm ka (ei pea kedagi teist siin silmas, aga üldiselt võite puust ette ja punaseks ka teha, mõni ei saa ikka aru). --kanakukk 8. oktoober 2008, kell 16:55 (UTC).
§5. Isikuandmete töötlemine: Isikuandmete töötlemine on iga isikuandmetega tehtav toiming, sealhulgas isikuandmete kogumine, salvestamine, korrastamine, säilitamine, muutmine, juurdepääsu võimaldamine, päringute teostamine, väljavõtete tegemine, kasutamine, edastamine, ristkasutamine, ühendamine, sulgemine, kustutamine või hävitamine või mitu eeltoodud toimingut, sõltumata toimingute teostamise viisist või kasutatavatest vahenditest. --kanakukk 10. oktoober 2008, kell 21:14 (UTC).

message: Kuna ei määruses ega uues standardis (EVS 585:2007) ei ole märget regiooni koodi kohta, siis tõstan vahepealse redaktsiooni siia: --WikedKentaur 8. oktoober 2008, kell 15:51 (UTC)
 47302200234
 ***********    
 GYYMMDDRRoC
 |\|\|\|\|||__ kontrollnumber
 | | | | ||__ järjenumber ühel ja samal päeval sündinuile
 | | | | |___ regiooni kood (47 - Läänemaa, 02 - Mingi Tallinna linnaosa, jne)
 | | | |____ sünnikuupäev (01 jne)
 | | |_____ sünnikuu number (jaanuar – 01 jne);
 | |______ sünniaasta kaks viimast numbrit
 |_______ sugu ja sünniaasta kaks esimest numbrit
         * 1 -- 1800-1899, mees
         * 2 -- 1800-1899, naine
         * 3 -- 1900-1999, mees
         * 4 -- 1900-1999, naine
         * 5 -- 2000-2099, mees
         * 6 -- 2000-2099, naine
----
Kas see PHP-näide ei ole mitte üleliigne? Andres 22. veebruar 2009, kell 08:16 (UTC)
thread_title:  vahepealne allikata redaktsioon 

message: Näide ei toiminud isikukoodide puhul, mis lõppevad numbriga 0. Parandatud.
Parandus: Enne kontrollsumma võrdlemist viimase numbriga tuleb vaadata kas kontrollsumma ei võrdunud 10-ga, sellisel juhul peab valiidses isikukoodis viimane number olema 0. Lisatud rida paksema kirjaga:
 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;
                        } 
                }
 
                $s = $s == 10 ? 0 : $s;
 
                return substr($code, -1) == $s;
thread_title:  viga teises php näites (Alternatiiv) 

message: === PHP ===
	function validateCode($code){
		$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;}
		}
		return $code[10] == $shouldBe;
	}
Alternatiiv:
	function validatePersonalCode($code)
	{	
		if(strlen($code) != 11	!is_numeric($code)) return false;
		for ( $k = 1; $k <= 3; ++$k) 
		{ 
			$s = 0;
		 
			for ( $i = 0; $i < 10; ++$i ) 
			{ 
			  $s += $k * $code{$i}; 
			  $k  = ( 9 == $k ? 1 : $k + 1 ); 
			} 
		 
			if ( ( $s %= 11 ) < 10 ) 
			{ 
			  break;
			} 
		}
		
		return $code[10] == $s % 10;
	}
Kompaktne alternatiiv:
	function validatePersonalCode($code)
	{	
		if (!preg_match('/^\d{11}$/', $code)) {
			return false;
		}
		$c1 = $c2 = 0;
		foreach (array(1,2,3,4,5,6,7,8,9,1,2,3) as $i => $m) {
			$i < 10 && $c1 += $m * $code[$i];
			$i >  1 && $c2 += $m * $code[$i - 2];
		}
		return ($c1 %= 11) < 10 ? $c1 : $c2 % 11 % 10 == $code[10];
	}
=== Python ===
def checkIDCode(code):
        if len(code) != 11 or not code.isdigit():
                return False
        c = map(int,code)
        w1 = [1,2,3,4,5,6,7,8,9,1]
        w2 = [3,4,5,6,7,8,9,1,2,3]
        s1 = sum(map(lambda x,y: x*y, c[:-1], w1))%11
        s2 = (sum(map(lambda x,y: x*y, c[:-1], w2))%11)%10
        return s1 == c[-1] or s1 == 10 and s2 == c[-1]
Alternatiiv:
kaalud1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]
kaalud2 = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3]
def arvuta_kontrollnumber(koodi_algus):
    kontrollnumber = 0
    for i in range(10):
        kontrollnumber += int(koodi_algus[i]) * kaalud1[i]
    kontrollnumber = kontrollnumber % 11
    if kontrollnumber == 10:
        kontrollnumber = 0
        for i in range(10):
            kontrollnumber += int(koodi_algus[i]) * kaalud2[i]
        kontrollnumber = kontrollnumber % 11
        if kontrollnumber == 10:
            kontrollnumber = 0
    return kontrollnumber
def kontrolli_isikukoodi(isikukood):
    isikukood = str(isikukood)
    if len(isikukood) != 11 or not isikukood.isdigit():
        return False
    return int(isikukood[10]) == arvuta_kontrollnumber(isikukood[:10])
thread_title:  Programmid kontrollnumbri kontrollimiseks 

message: function validateCode($code){
		$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;}
		}
		return $code[10] == $shouldBe;
	}
Alternatiiv:
	function validatePersonalCode($code)
	{	
		if(strlen($code) != 11	!is_numeric($code)) return false;
		for ( $k = 1; $k <= 3; ++$k) 
		{ 
			$s = 0;
		 
			for ( $i = 0; $i < 10; ++$i ) 
			{ 
			  $s += $k * $code{$i}; 
			  $k  = ( 9 == $k ? 1 : $k + 1 ); 
			} 
		 
			if ( ( $s %= 11 ) < 10 ) 
			{ 
			  break;
			} 
		}
		
		return $code[10] == $s % 10;
	}
Kompaktne alternatiiv:
	function validatePersonalCode($code)
	{	
		if (!preg_match('/^\d{11}$/', $code)) {
			return false;
		}
		$c1 = $c2 = 0;
		foreach (array(1,2,3,4,5,6,7,8,9,1,2,3) as $i => $m) {
			$i < 10 && $c1 += $m * $code[$i];
			$i >  1 && $c2 += $m * $code[$i - 2];
		}
		return ($c1 %= 11) < 10 ? $c1 : $c2 % 11 % 10 == $code[10];
	}
thread_title:  PHP 

message: def checkIDCode(code):
        if len(code) != 11 or not code.isdigit():
                return False
        c = map(int,code)
        w1 = [1,2,3,4,5,6,7,8,9,1]
        w2 = [3,4,5,6,7,8,9,1,2,3]
        s1 = sum(map(lambda x,y: x*y, c[:-1], w1))%11
        s2 = (sum(map(lambda x,y: x*y, c[:-1], w2))%11)%10
        return s1 == c[-1] or s1 == 10 and s2 == c[-1]
Alternatiiv:
kaalud1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]
kaalud2 = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3]
def arvuta_kontrollnumber(koodi_algus):
    kontrollnumber = 0
    for i in range(10):
        kontrollnumber += int(koodi_algus[i]) * kaalud1[i]
    kontrollnumber = kontrollnumber % 11
    if kontrollnumber == 10:
        kontrollnumber = 0
        for i in range(10):
            kontrollnumber += int(koodi_algus[i]) * kaalud2[i]
        kontrollnumber = kontrollnumber % 11
        if kontrollnumber == 10:
            kontrollnumber = 0
    return kontrollnumber
def kontrolli_isikukoodi(isikukood):
    isikukood = str(isikukood)
    if len(isikukood) != 11 or not isikukood.isdigit():
        return False
    return int(isikukood[10]) == arvuta_kontrollnumber(isikukood[:10])
thread_title:  Python 

message: Naljakas lause, mille siit leidsin: "Haiglatele eraldatud järjekorranumbri vahemikud arvatakse olevat üldjoontes järgmised:". Arvatakse olevat? Kes niimoodi arvab? Ja miks mitte pigem esitada fakte, mitte arvamusi sellise asja kohta? --194.150.65.21 3. august 2018, kell 08:25 (EEST)
thread_title:  Kes arvab?