Isikukood: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
88. rida:
 
'''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.
 
== Programmid kontrollnumbri kontrollimiseks ==
 
=== PHP ===
{| class="wikitable"
|-
|
<syntaxhighlight lang="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;
}
</syntaxhighlight>
|}
 
Alternatiiv:
 
{| class="wikitable"
|-
|
<syntaxhighlight lang="php">
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;
}
</syntaxhighlight>
|}
 
Kompaktne alternatiiv:
 
{| class="wikitable"
|-
|
<syntaxhighlight lang="php">
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];
}
</syntaxhighlight>
|}
 
 
=== Python ===
 
{| class="wikitable"
|-
|
<syntaxhighlight lang="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]
</syntaxhighlight>
|}
 
Alternatiiv:
 
{| class="wikitable"
|-
|
<syntaxhighlight lang="python">
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])
</syntaxhighlight>
|}
 
== Viited ==