| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Henkilötunnusraspi 22.05.02 01:36 Tällä voi tarkastaa henkilötunnuksen oikeellisuuden
<?php function tarkista_henkilotunnus ($hetu) { if (strlen($hetu) == 11) { $paiva = (int) substr($hetu, 0, 2); // PP $kuukausi = substr($hetu, 2, 2); // KK $vuosi = substr($hetu, 4, 2); // VV $vsata = substr($hetu, 6, 1); // C $ynro = substr($hetu, 7, 3); // NNN $tark = substr($hetu, 10, 1); // X if (($kuukausi >= 1 || $kuukausi <= 12) && ($ynro > 002 || $ynro < 999)) { $vuosisata = array ( '+' => "1800", '-' => "1900", 'A' => "2000" ); if (isset($vuosisata[$vsata]) && $vuosisata[$vsata]) { $tarkistusmerkit = array ( 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => A, 11 => B, 12 => C, 13 => D, 14 => E, 15 => F, 16 => H, 17 => J, 18 => K, 19 => L, 20 => M, 21 => N, 22 => P, 23 => R, 24 => S, 25 => T, 26 => U, 27 => V, 28 => W, 29 => X, 30 => Y ); $tarkista = ($paiva . $kuukausi . $vuosi . $ynro) % 31; if (isset($tarkistusmerkit[$tarkista]) && $tarkistusmerkit[$tarkista] == $tark) {return 1;} else {return 0;} } else {return 0;} } else {return 0;} } else {return 0;} } $htun = "010101-0101"; echo "Henkilötunnus: <b>$htun</b> == "; if (tarkista_henkilotunnus($htun)) {echo "OK";} else {echo "VÄÄRÄ";} echo "<br>\n"; ?> Akiro 13:24 30.8.02 toinen versio samasta asiasta, tosin sisennykset ei taida toimia tässä kommentti-kentässä, mutta kai tosta selvän saa: function chk_henktun($tunnus) { $merkit = array(0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y"); if(eregi("^([0-9]{6})-([0-9]{3})([0-9a-z]{1})$",$tunnus,$regs)) { if($merkit[intval($regs[1].$regs[2])%31] == strtoupper($signum[strlen($tunnus)-1])) { return true; } } else return false; } pllk 12:14 16.4.03 Esimerkkinä hyvä, mutta aika paljon tuota voisi tiivistääkin, kuten Akiro sanoi. Kuinkahan moni tarvitsee oikeasti henkilötunnuksen tarkistusta ohjelmassaan? ;-) function tarkistahetu($t) { $k = "0123456789ABCDEFHJKLMNPRSTUVWXY"; return substr($k,intval(substr($t,0,6).substr($t,7,3))%31,1)==substr($t,-1); } lerppukorppucd 15:09 27.9.03 Tosi hyvä 5+ arvonen! lerppukorppucd 15:11 27.9.03 Oonki miettiny mikä on nyt 2000 ja 1800-luvulla ne välimerkit Drex 18:09 7.2.04 :) Hyvä. Tombio 12:22 25.8.04 $tarkistusmerkit-taulukkoon syötetään alkioihin vakioita, joita ei missään esitellä... Muuten kyllä pelaa kivasti. S-E Davidsson 12:33 4.10.04 Been searching for the past day for a way to validate finnish "henkilötunnu". A friend pointed me to this site&page, but now I'm confronted with another issue, I thought finnish numbers were almost like the swedish (10 chars) YYMMDD-XXXX, but with DDMMYY-123A, this script above wants 11 chars instead of ten, can someone help me out? :) editoitu: 12:04 29.10.04 empty 12:04 29.10.04 ... like the swedish (10 chars) YYMMDD-XXXX, but with DDMMYY-123A, this script above wants 11 chars instead of ten... In finnish social security numbers the delimiter (the slash in your example) denotes the century-of-birth for the person, hence the eleven char requirement. (Sorry for my horrible English :P) Kiva script, muuten. pi 10:14 8.10.05 Kannattaa vielä tarkistaa on ko kyseistä päivää edes ollutkaan... bool checkdate ( int month, int day, int year ) ares01 13:24 29.10.05 oh fuck its cool |
![]() Haku
|