Teknik untuk Validation no Kad Pengenalan dalam Model
26 replies [Last post]
CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

daku kecewa tak boleh nak pos apa2 lagi ...
amin007's picture
User offline. Last seen 8 weeks 3 days ago. Offline
Pro
Joined: 08/16/2009
Points: 2050

bazet wrote:

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

Hukum 1 :7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid kalau tak silap, 7701023 ada 7 nombor sejak bila JPN tambah nombor kat situ????

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

amin007 wrote:
bazet wrote:

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

Hukum 1 :7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid kalau tak silap, 7701023 ada 7 nombor sejak bila JPN tambah nombor kat situ????

typo la tu

daku kecewa tak boleh nak pos apa2 lagi ...
amin007's picture
User offline. Last seen 8 weeks 3 days ago. Offline
Pro
Joined: 08/16/2009
Points: 2050

hymns wrote:
amin007 wrote:
bazet wrote:

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

Hukum 1 :7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid kalau tak silap, 7701023 ada 7 nombor sejak bila JPN tambah nombor kat situ????

typo la tu

typo tu apa???

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

bazet wrote:

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

aku patch dlm cake/libs/validation.php

add dlm ssn function, asal boleh guna dulu. hehe

case 'my':
$_this->regex  = '/\\A\\b[0-9]{6}-[0-9]{2}-[0-9]{4}\\b\\z/i';
break;

Usage

var $validate = array(
       'ssn' => array(
       'rule' => array('ssn', null, 'my')
   )
);
I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

amin007 wrote:
hymns wrote:
amin007 wrote:
bazet wrote:

No kad pengenalan malaysia : 7701023-11-3422

Hukum 1
7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid

Hukum 2
11 - no kod negeri, kena check negeri valid ker tak

Hukum 1
3422 - entah..tapi no genap akhir menunjukkan lelaki/perempuan

So dalam Model CakePHP kena buat checking khas untuk pastikan user masukkan nombor yang betul

Input adalah input text, samaada nak guna 1 field atau pecah 3 ?

So sapa nak buat ? Ramai nak guna nih ?

Hukum 1 :7701023 - tarikh lahir, kena buat hukum supaya tarik itu valid kalau tak silap, 7701023 ada 7 nombor sejak bila JPN tambah nombor kat situ????

typo la tu

typo tu apa???

$typo = 'salah taip';

busy man
User offline. Last seen 1 year 15 weeks ago. Offline
Joined: 08/08/2004
Points: 630

ic tentera ngan polis ? kadang state ada dua nombor tengah

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

alien3d wrote:
ic tentera ngan polis ? kadang state ada dua nombor tengah

kene buat option validate samada polis atau tentera. mmg ade kebarangkalian. so sapa nak contribute paste la snippet kat sini.

CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

good one hymns ( apa nama betul ? )

Hack SSN Laughing out loud , tapi kena hack pulak kat core

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

bazet wrote:

good one hymns ( apa nama betul ? )

Hack SSN Laughing out loud , tapi kena hack pulak kat core

Aik dari WM dulu sama2 dgn MHR, Mystic. Jadi tukang test ko punya mamakspot masa ko mula2 main cake pun ko tanya lagi sape nama aku. hampeh punya orang kampung! Ko balik johor haku calar2 kan kete ngko Tongue

* Dah tu paling senang & cepat. Patch skit je. Release core baru pun lama lagi. Baru je kuar 1.3.2 Big smile

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

aku patch lagi dlm cake/libs/validation.php

case 'my':
$_this->regex  = '/\\A\\b[0-9]{6}-[0-9]{2}-[0-9]{4}\\b\\z/i';
break;

case 'myo':
$_this->regex  = '/\\A\\b[at]{1}[0-9]{7}\\b\\z/i';
break;

Usage

var $validate = array(
       'ssn' => array(
       'rule' => array('ssn', null, 'myo')
   )
);

Valid untuk tentera (T1234567) & ic lama (A1234567). Polis aku tak tau format ape?

CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

ha hah ok total recalled

ok extra hukum untuk 6 digit pertama
1. kita tau kan birthday, so kena laa valid date kan

801131 sure tak valid sebab mana ada tarikh 31 November 1980, cara paling terbaik, guna fungsi checkdate().

http://php.net/manual/en/function.checkdate.php

untuk hukum no 2, based ikut negeri
01= johor
02 = melaka

So yg nih boleh guna in_array() untuk checking

hukum no 3 ( 4 angka terakhir ) nih aku tak tau kriteria dia

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

bazet wrote:

ha hah ok total recalled

ok extra hukum untuk 6 digit pertama
1. kita tau kan birthday, so kena laa valid date kan

801131 sure tak valid sebab mana ada tarikh 31 November 1980, cara paling terbaik, guna fungsi checkdate().

http://php.net/manual/en/function.checkdate.php

untuk hukum no 2, based ikut negeri
01= johor
02 = melaka

So yg nih boleh guna in_array() untuk checking

hukum no 3 ( 4 angka terakhir ) nih aku tak tau kriteria dia

last digit untuk 4 digit ni kalau ganjil lelaki & genap perempuan

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

<?php
//
// @params string $ic_number
// @params bool $non_standard ic type
// @params string $gender M/F
function nirc_validation($ic_number, $non_standard=false, $gender=null)
{
   
// check non standard (askar / ic lama) ? polis ? x tau format
   
if ($non_standard)
        return
preg_match("/\A\b[at]{1}[0-9]{7}\b\z/i", $ic_number);

   
// standard ic
   
else
    {
       
// looking for dashed '-'
       
if (strpos($ic_number, '-'))
        {
           
// check str len, no match 14 char?
           
if (strlen($ic_number) != 14)
                return
false;

           
// check format
           
if (!preg_match("/\A\b[0-9]{6}-[0-9]{2}-[0-9]{4}\b\z/i", $ic_number))
                return
false;

           
$ic_part = explode('-', $ic_number);

           
// check dash, not match 3 part ?
           
if (sizeof($ic_part) != 3)
                return
false;

           
// split of
           
$date_of_birth = $ic_part[0];
           
$state_of_birth = $ic_part[1];
           
$gender_of_user = $ic_part[2];
        }
       
// no dashed ic
       
else
        {
           
// check str len, not match 12 char?
           
if (strlen($ic_number) != 12)
                return
false;

           
// split of
           
$date_of_birth = substr($ic_number, 0, 6);
           
$state_of_birth = substr($ic_number, 6, 2);
           
$gender_of_user = substr($ic_number, -4);
        }

       
// -------------------------------------------------
        // filtering part
        // -------------------------------------------------

        // mod date
       
$year_of_birth = substr($date_of_birth, 0, 1) != 0 ? 19 : 20;
       
$year_of_birth = (int) $year_of_birth . substr($date_of_birth, 0, 2);
       
$month_of_birth = (int) substr($date_of_birth, 2,2);
       
$day_of_birth = (int) substr($date_of_birth, -2);

       
// check birth
       
if (!checkdate($month_of_birth, $day_of_birth, $year_of_birth));
            return
false;

       
// check state
       
$state_list = array('01', '11'); // tambah sendiri yerk
       
if (!in_array($state_of_birth, $state_list))
            return
false;

       
// check gender
       
if (!empty($gender))
        {
           
$gender_user = substr($gender_of_user, -1);

           
$identifier = ($gender_user & 1) ? 'M' : 'F';

            if (
$gender != $identifer)
                return
false;
        }

       
// done
       
return true;
    }
}

?>

bumb! Cool

CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

sukacita kalau disertakan contoh untuk gabungkan dalam Model, apa kata User Model

<?php
Class User extends AppModel{

  var
$validate = array(...);

  function
nirc_validation($ic_number, $non_standard=false, $gender=null){...}
}
?>
I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

bazet wrote:

sukacita kalau disertakan contoh untuk gabungkan dalam Model, apa kata User Model

<?php
Class User extends AppModel{

  var
$validate = array(...);

  function
nirc_validation($ic_number, $non_standard=false, $gender=null){...}
}
?>

Err test dulu code tuh. Aku x sempat test. Pinggan pecah pulak. Dah kul 12 ni lom masak lagi. Sila2 report/patch sendiri kalau ada bugs

does not have a status.
User offline. Last seen 3 years 34 weeks ago. Offline
Joined: 08/16/2009
Points: 2

ni contoh nak cek no ic.
updated version. cover tahun lompat.
format: yymmdd-ss-rrrr atau yymmddssrrrr

<?php
class User extends AppModel {

    var
$name = 'User';
    var
$validate = array(
           
'no_kp' => array(
           
'rule' => array('ic','JH','male'),
           
'message' => 'No ic x valid'
       
)
    );

    function
ic($data, $state=null, $sex=null) {

       
$value = array_values($data);
       
$value = $value[0];

       
// reference: <a>http://www.jpn.gov.my/kodnegeri</a>
       
$state_arr = array(
           
'JH'=>'01|21|22|23|24', //johor
           
'KD'=>'02|25|26|27', //kedah
           
'KN'=>'03|28|29', //kelantan
           
'MK'=>'04|30', //melaka
           
'NS'=>'05|31|59', //n sembilan
           
'PH'=>'06|32|33', //pahang
           
'PP'=>'07|34|35', //p pinang
           
'PK'=>'08|36|37|38|39', //perak
           
'PS'=>'09|40', //perlis
           
'SL'=>'10|41|42|43|44', //selangor
           
'TG'=>'11|45|46', //terengganu
           
'SB'=>'12|47|48|49', //sabah
           
'SW'=>'13|50|51|52|53', //sarawak
           
'WPK'=>'14|54|55|56|57', //KL
           
'WPL'=>'15|58', //labuan
           
'WPP'=>'16', //putrajaya
           
'UN'=>'82', //unknown
       
);
       
       
$sex_arr = array(
           
'male'=>'1|3|5|7|9',
           
'female'=>'0|2|4|6|8',
        );
       
       
$regex = '%^((((([02468][048]|[13579][26]))((((0[13578])|(1[02]))(([0-2][0-9])|(3[01])))|(((0[469])|11)(([0-2][0-9])|30))|(02[0-2][0-9])))|((([02468][1235679])|([13579][01345789]))((((0[13578])|(1[02]))(([0-2][0-9])|(3[01])))|(((0[469])|11)(([0-2][0-9])|30))|(02[0-2][0-8]))))' //YYMMDD
               
.'[-]?' //-
               
. '('.(isset($state_arr[$state])?$state_arr[$state]:implode('|',$state_arr)).')' //SS
               
.'[-]?' //-
               
.'[0-9]{3}('.(isset($sex_arr[$sex])?$sex_arr[$sex]:'[0-9]').'))$%'; //RRRR

       
return preg_match($regex, $value);
    }
}
?>
CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

terima kasih, boleh nanti tambah checking tahun lumpat..or validateDate

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

e_m_n_u wrote:

ni contoh nak cek no ic. kelemahan dia xleh cek tahun lompat. format: yymmdd-ss-rrrr atau yymmddssrrrr

<?php
class User extends AppModel {

    var
$name = 'User';
    var
$validate = array(
           
'no_kp' => array(
           
'rule' => 'ic',
           
'message' => 'No ic x valid'
       
)
    );

    function
ic($data) {
       
$state = null; //change it to your desire value
       
$sex = null; //change it to your desire value

       
$value = array_values($data);
       
$value = $value[0];

       
// reference: <a href="http://www.jpn.gov.my/kodnegeri">http://www.jpn.gov.my/kodnegeri</a>
       
$state_arr = array(
           
'JH'=>'01|21|22|23|24', //johor
           
'KD'=>'02|25|26|27', //kedah
           
'KN'=>'03|28|29', //kelantan
           
'MK'=>'04|30', //melaka
           
'NS'=>'05|31|59', //n sembilan
           
'PH'=>'06|32|33', //pahang
           
'PP'=>'07|34|35', //p pinang
           
'PK'=>'08|36|37|38|39', //perak
           
'PS'=>'09|40', //perlis
           
'SL'=>'10|41|42|43|44', //selangor
           
'TG'=>'11|45|46', //terengganu
           
'SB'=>'12|47|48|49', //sabah
           
'SW'=>'13|50|51|52|53', //sarawak
           
'WPK'=>'14|54|55|56|57', //KL
           
'WPL'=>'15|58', //labuan
           
'WPP'=>'16', //putrajaya
           
'UN'=>'82', //unknown
       
);

       
$sex_arr = array(
           
'male'=>'1|3|5|7|9',
           
'female'=>'0|2|4|6|8',
        );

       
$regex = '([0-9]{2}' //YY
                       
.'([0][1-9]|[1][0-2])' //MM
                       
.'([0-2][0-9]|[3][0-1])' //DD
                       
.'[-]?' //-
                       
. '('.(isset($state_arr[$state])?$state_arr[$state]:implode('|',$state_arr)).')' //SS
                       
.'[-]?' //-
                       
.'[0-9]{3}('.(isset($sex_arr[$sex])?$sex_arr[$sex]:'[0-9]').'))'; //RRRR

       
return preg_match($regex, $value);
    }
}
?>

nice one Big smile

CakePHP Trainer
User offline. Last seen 2 years 15 weeks ago. Offline
Joined: 01/27/2003
Points: 408

lepas nih boleh tambah no telco pulak, cakephp validation localised untuk Malaysia...good efforts. Nanti aku buat review dalam my blow

Sedang mencari pembangun PHP yang berpengalaman.
User offline. Last seen 1 year 19 weeks ago. Offline
Pro
Joined: 06/28/2010
Points: 123

Ada beberapa kod lagi untuk warganegara yang dilahirkan di luar negara:

http://www.jpn.gov.my/kodnegara

invalid status
mosfet83's picture
User offline. Last seen 11 weeks 3 days ago. Offline
Joined: 08/16/2009
Points: 602

Aku ada kawan perempuan yang nombor belakang IC nombor ganjil. Macam mana plak tu? heheh. Jarang berlaku, 1 dalam 1 juta punya kes kot.

does not have a status.
User offline. Last seen 37 weeks 1 day ago. Offline
Joined: 11/18/2009
Points: 97

mosfet83 wrote:
Aku ada kawan perempuan yang nombor belakang IC nombor ganjil. Macam mana plak tu? heheh. Jarang berlaku, 1 dalam 1 juta punya kes kot.

aku pun penah jumpa kwn pempuan sama kod negeri dan 4 digit last tuh dengan ic aku.. hahaha

p/s: aku laki.. Big smile

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

dark_m wrote:
mosfet83 wrote:
Aku ada kawan perempuan yang nombor belakang IC nombor ganjil. Macam mana plak tu? heheh. Jarang berlaku, 1 dalam 1 juta punya kes kot.

aku pun penah jumpa kwn pempuan sama kod negeri dan 4 digit last tuh dengan ic aku.. hahaha

p/s: aku laki.. Big smile

dob lain kan... Big smile

ibnuyahya.com
User offline. Last seen 28 weeks 20 hours ago. Offline
Joined: 08/16/2009
Points: 243

TerasAmpuh wrote:

Ada beberapa kod lagi untuk warganegara yang dilahirkan di luar negara:

http://www.jpn.gov.my/kodnegara

Bukan untuk validation no kp. tapi untuk tambah library negara dalam kod e_m_n_u . untuk orang malas taip satu2 macam aku. Kod janji boleh jalan Tongue

<?php
$dom
= new DOMDocument();
$dom->loadHTML(file_get_contents('http://www.jpn.gov.my/kodnegara'));
$myval = '';
$x = 0;
$toggle = 'K';
foreach (
$dom->getElementsByTagName('td') as $td) {
    if (
$myval == 'SENARAI KOD BAGI NEGARA KELAHIRAN') {
       
$toggle = ($toggle == 'N') ? 'K' : 'N';
       
$data[$x][$toggle] = trim($td->nodeValue);
        if (
$toggle == 'K')
           
$x++;
    }

    if (
$myval != 'SENARAI KOD BAGI NEGARA KELAHIRAN') {
       
$myval = trim($td->nodeValue);
    }
}

/*
  echo '<pre>';
  print_r($data);
  echo '</pre>';
*/

$country = trim(file_get_contents('http://www.iso.org/iso/list-en1-semic-3.txt'));
$country = str_replace('This list states the country names (official short names in English) in alphabetical order as given in ISO 3166-1 and the corresponding ISO 3166-1-alpha-2 code elements. The list is updated whenever a change to the official code list in ISO 3166-1 is effected by the ISO 3166/MA. It lists 246 official short names and code elements. One line of text contains one entry. A country name and its code element are separated by a semicolon (;).', '', $country);
//echo $country;

$lines = explode("\n", trim($country));
foreach (
$lines as $val) {
   
$dat = explode(';', $val);
   
$country_code[trim($dat[0])] = trim($dat[1]);
}
/*
  echo '<pre>';
  print_r($country_code);
  echo '</pre>';
*/
foreach ($data as $row) {
    if (
array_key_exists(strtoupper($row['N']), $country_code)) {
        echo
"'{$country_code[strtoupper($row['N'])]}'=>'{$row['K']}', //{$row['N']}<br/>";
    } else {
        echo
"'{$row['N']}'=>'{$row['K']}', //{$row['N']}        === Shortcode not found!<br/>";
    }
}
?>



invalid status
mosfet83's picture
User offline. Last seen 11 weeks 3 days ago. Offline
Joined: 08/16/2009
Points: 602

hymns wrote:
dark_m wrote:
mosfet83 wrote:
Aku ada kawan perempuan yang nombor belakang IC nombor ganjil. Macam mana plak tu? heheh. Jarang berlaku, 1 dalam 1 juta punya kes kot.

aku pun penah jumpa kwn pempuan sama kod negeri dan 4 digit last tuh dengan ic aku.. hahaha

p/s: aku laki.. Big smile

dob lain kan... Big smile

kalau sama dah jadi kes kembar siam lain mak lain bapak Laughing out loud

I'm noob
hymns's picture
User offline. Last seen 2 years 3 weeks ago. Offline
Pro
Joined: 08/16/2009
Points: 975

mosfet83 wrote:
hymns wrote:
dark_m wrote:
mosfet83 wrote:
Aku ada kawan perempuan yang nombor belakang IC nombor ganjil. Macam mana plak tu? heheh. Jarang berlaku, 1 dalam 1 juta punya kes kot.

aku pun penah jumpa kwn pempuan sama kod negeri dan 4 digit last tuh dengan ic aku.. hahaha

p/s: aku laki.. Big smile

dob lain kan... Big smile

kalau sama dah jadi kes kembar siam lain mak lain bapak Laughing out loud

hahaha Party