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
Copy Code
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