Skip to content


หมายเลขบัตรประชาชน? สร้างเองดีกว่า

สาเหตุที่ผมเขียนบทความนี้ขึ้นมา เพราะว่ามันจะมีบางช่วงเวลาที่ผมจำเป็นต้องใช้หมายเลขบัตรประชาชนในการทำอะไรหลาย ๆ อย่าง ไม่ว่าจะเป็นเรื่องของการทำระบบ verify หมายเลขบัตรประชาชน หรือเอาไปใช้สมัครโน่นสมัครนี่ บางครั้งผมแค่อยากลองเฉย ๆ แต่ไม่ได้อยากใช้หมายเลขบัตรของผมจริง ๆ ด้วยเหตุผลด้านความปลอดภัยของผมเอง ผมเลยลองสร้างหมายเลขบัตรประชาชนจากอัลกอริธึมในการตรวจสอบหมายเลขบัตรประชาชนขึ้นมา

อัลกอริธึมในการตรวจสอบหมายเลขบัตรประชาชน สามารถหาได้ตามเว็บทั่ว ๆ ไป ที่ผมได้มาก็จะประมาณนี้ครับ (Javascript)

function validate_thai_citizen_id(id)
{
    var b = 0;
    if (id.length < 13) return false;
    checksum = id.substring(12, 13);
    for (var i = 0; i < 12; i++)
    {
        b += parseInt(id.substring(i, i+1)) * (13 - i);
    }
    tmp = 11 - (b % 11);
    switch(tmp)
    {
        case 11: check = 1; break;
        case 10: check = 0; break;
        default: check = tmp;
    }
    return (check == checksum);
}

จาก code ด้านบน เราจะเห็นได้ว่าส่วนที่สำคัญที่สุดคือ digit สุดท้าย ซึ่งจะทำหน้าที่เป็น checksum digit ซึ่งเราสามารถคำนวณได้จาก 12 digits แรก

เมื่อเราเอามาจัดการเขียนให้เป็นเรื่องเป็นราวจะได้แบบนี้ครับ

function generate_thai_citizen_id()
{
	$checksum = 0;
	$b = 0;
	$r = 0;
	$t = "";
	mt_srand();
	for ($i = 0; $i < 12; $i ++)
	{
		$r = mt_rand(0, 9);
		$b += $r * (13 - $i);
		$t .= "$r";
	}
	$tmp = 11 - ($b % 11);
	switch($tmp)
	{
		case 11: $check = 1; break;
		case 10: $check = 0; break;
		default: $check = $tmp;
	}
	$t .= $check;
	return $t;
}

Code ด้านบนนี้ผมพอร์ตมาจาก Javascript version ที่ผมทำไว้ให้เป็น PHP ครับ

ลองดูหน้าที่ทำเสร็จแล้ว (PHP) ได้ที่ LIVE DEMO เลยครับ

ปล. หมายเลขบัตรประชาชนที่สร้างจาก LIVE DEMO สามารถนำไปใช้ได้จริงนะครับ ใช้ให้ถูกที่ถูกกฏหมายนะครับ
ปล. อีกที วันที่ 9 ก.ย. 52 ผมแก้ไข code ที่เป็น เวอร์ชั่น php ให้ถูกต้องครับ มีบักนิดหน่อย

Share

Posted in Algorithm, JavaScript, PHP, Souce Code, Uncategorized.

Tagged with , , , .


7 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. วิชุดา says

    ขอทีเถอะ

  2. chonla says

    ขออะไรครับ

  3. ลูกศิษดิ์พี่อู says

    ขอทีเถอะ

  4. ลูกศิษดิ์พี่อู says

    ทำไมผมแปลงจาก js เป็น php แล้ว

    ตรวจสอบผิดตลอดเลยอะ ผิดตรงไหนเนี้ย

    function validate_thai_citizen_id($id)
    {
    $id = intval(trim($id));
    $b = 0;
    if ( strlen($id) < 13) return false;
    $checksum = substr($id, 12, 13);
    for ( $i = 0; $i < 12; $i++)
    {
    $b += intval( substr( $id , $i, $i + 1) ) * (13 – $i);
    }
    $tmp = 11 – ( $b % 11);
    switch( $tmp )
    {
    case 11: $check = 1; break;
    case 10: $check = 0; break;
    default: $check = $tmp;
    }
    return ( $check == $checksum );
    }

  5. ลูกศิษดิ์พี่อู says

    ฮาๆ ผมเอามาเขียนใหม่ แก้ได้แบบนี้ครับ

    เวิร์กแล้วว
    เยี่ยมๆๆๆๆๆๆ

    พอดี ไปอ่านเจอ อัลกอริทึม ในการคิดมาอะ

    http://www.mindphp.com/modules.php?name=News&file=article&sid=62

    function validate_thai_citizen_id($id)
    {
    $b = 0;
    if ( strlen($id) < 13) return false;
    $checksum = substr($id, 12);
    for ( $i = 0; $i < 12; $i++)
    {
    $b += $id[$i] * (13 – $i);
    }

    $tmp = 11 – ( $b % 11);
    switch( $tmp )
    {
    case 11: $check = 1; break;
    case 10: $check = 0; break;
    default: $check = $tmp;
    }
    return ( $check == $checksum );
    }

  6. chonla says

    ตกลงเค้าขออะไรทีนึงเนี่ย

  7. ลูกศิษดิ์พี่อู says

    555 ไม่มีอะไรพี่ อย่าคิดมาก อิอิอิ



Some HTML is OK

or, reply to this post via trackback.

*