Asmens kodas
Reikia patikrinti asmens kodo teisingumą? Manau šis dalykas jums pravers. Skanaus.
Algoritmas lietuviško asmens kodo (nuo 65 puslapio).
PHP, JavaScript versija pateikti nuo manęs, kiti buvo parodyti kaip komenarai senojoje blogo versijoje.
PHP
PHP - Copy Code
1 <? 2 /** 3 * Tikrina ar asmens kodas 4 * 5 * @param string $s 6 * @return bool 7 */ 8 9 function ar_asmens_kodas($s) { 10 if (!is_numeric($s) || strlen($s)!=11) { 11 return false; 12 } 13 $d=0; $e=0; $b=1; $c=3; 14 for ($i=0;$i<10;$i++) { 15 $a=$s[$i]; 16 $d=$d+($b*$a); 17 $e=$e+($c*$a); 18 $b++; if ($b==10) $b=1; 19 $c++; if ($c==10) $c=1; 20 } 21 $d=$d % 11; 22 $e=$e % 11; 23 if ($d==10) { 24 $i = ($e == 10) ? 0 : $e; 25 } else { 26 $i = $d; 27 } 28 return ($s[10]==$i) ? true : false; 29 } 30 31 /** 32 * Butinai reikia paduotu stringa siam scriptui atveju, pvz 33 * ar_asmens_kodas('38011254123'); 34 */ 35 ?>
Javscript
Javascript – Copy Code
1 function tikrinti_akoda(kodas) { 2 var i,a,b,c,d,e; 3 var s = new String(kodas); 4 d=0; 5 e=0; 6 b=1; 7 c=3; 8 for (i=0;i<10;i++) { 9 a=s.charAt(i); 10 d=d+(b*a); 11 e=e+(c*a); 12 b=b+1; 13 if (b==10) 14 b=1; 15 c=c+1; 16 if (c==10) 17 c=1; 18 } 19 d=d % 11; 20 e=e % 11; 21 if (d==10) { 22 if (e==10) 23 i=0; 24 else 25 i=e; 26 } else 27 i=d; 28 if (s.charAt(10)==i) 29 return true; 30 else 31 return false; 32 }
Perl
http://search.cpan.org/~kudarasp/Asmens-Kodas-0.02/lib/Asmens/Kodas.pm
MS SQL
1 CREATE PROCEDURE asmensKodoTikrinimasSP 2 ( @AsmensKodas bigint 3 ) 4 AS 5 BEGIN 6 DECLARE @L INTEGER, 7 @M1 INTEGER, 8 @M2 INTEGER, 9 @M3 INTEGER, 10 @M4 INTEGER, 11 @D1 INTEGER, 12 @D2 INTEGER, 13 @R1 INTEGER, 14 @R2 INTEGER, 15 @R3 INTEGER, 16 @K INTEGER, 17 @ATS BIT 18 19 IF @AsmensKodas > 10000000000 20 BEGIN 21 IF @AsmensKodas < 69999999999 22 BEGIN 23 SET @L = @AsmensKodas / 10000000000 24 SET @AsmensKodas = @AsmensKodas - (10000000000 * @L) 25 SET @M1 = @AsmensKodas / 1000000000 26 SET @AsmensKodas = @AsmensKodas % 1000000000 27 SET @M2 = @AsmensKodas / 100000000 28 SET @AsmensKodas = @AsmensKodas % 100000000 29 SET @M3 = @AsmensKodas / 10000000 30 SET @AsmensKodas = @AsmensKodas % 10000000 31 SET @M4 = @AsmensKodas / 1000000 32 SET @AsmensKodas = @AsmensKodas % 1000000 33 SET @D1 = @AsmensKodas / 100000 34 SET @AsmensKodas = @AsmensKodas % 100000 35 SET @D2 = @AsmensKodas / 10000 36 SET @AsmensKodas = @AsmensKodas % 10000 37 SET @R1 = @AsmensKodas / 1000 38 SET @AsmensKodas = @AsmensKodas % 1000 39 SET @R2 = @AsmensKodas / 100 40 SET @AsmensKodas = @AsmensKodas % 100 41 SET @R3 = @AsmensKodas / 10 42 SET @AsmensKodas = @AsmensKodas % 10 43 SET @K = @AsmensKodas 44 45 DECLARE @Suma INTEGER, @Liekana INTEGER 46 SET @Suma = @L * 1 + @M1 * 2 + @M2 * 3 + @M3 * 4 + @M4 * 5 + 47 @D1 * 6 + @D2 * 7 + @R1 * 8 + @R2 * 9 + @R3 * 1 48 SET @Liekana = @Suma % 11 49 IF @Liekana <> 10 50 BEGIN 51 IF @Liekana = @K 52 SET @ATS = 1 53 ELSE 54 SET @ATS = 0 55 END 56 ELSE 57 BEGIN 58 SET @Suma = @L * 3 + @M1 * 4 + @M2 * 5 + @M3 * 6 + @M4 * 7 + 59 @D1 * 8 + @D2 * 9 + @R1 * 1 + @R2 * 2 + @R3 * 3 60 SET @Liekana = @Suma % 11 61 IF @Liekana <> 10 62 BEGIN 63 IF @Liekana = @K 64 SET @ATS = 1 65 ELSE 66 SET @ATS = 0 67 END 68 ELSE 69 BEGIN 70 SET @Liekana = 0 71 IF @Liekana = @K 72 SET @ATS = 1 73 ELSE 74 SET @ATS = 0 75 END 76 END 77 END 78 ELSE 79 SET @ATS = 0 80 END 81 ELSE 82 SET @ATS = 0 83 84 SELECT @ATS
Kita
Na daugiau :) Dos versija