supanaree
ดู Blog ทั้งหมด

วิธีเช็ค เลขบัตรประชาชน บัตรประจำตัวประชาชน

เขียนโดย supanaree

วิธีเช็ค เลขบัตรประชาชน บัตรประจำตัวประชาชน

อยากทราบวิธีการเขียนโค๊ต เลขบัตรประจำตัวประชาชน 13 หลัก ครับ โดยให้เลขที่ 13 เป็นเลขที่ถูกต้องตามหลักการคิดครับ และตั้งเป็น autonumber ครับ

เลขบัตร 1201541462234

  • ขั้นตอนที่ 1 - เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน (หลักที่ 13 ไม่ต้องเอามานะคร้าบ)
  • ขั้นตอนที่ 2 - เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน
  • ขั้นตอนที่ 3 - เอาผลคูณทั้ง 12 ตัวมา บวกกันทั้งหมด จะได้ 13+24+0+10+45+32+7+24+30+8+6+6=205
  • ขั้นตอนที่ 4 - เอาเลขที่ได้จากขั้นตอนที่ 3 มา mod 11 (หารเอาเศษ) จะได้ 205 mod 11 = 7
  • ขั้นตอนที่ 5 - เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 4 จะได้ 11-7 = 4 (เราจะได้ 4 เป็นเลขในหลัก Check Digit)
    ถ้าเกิด ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit (เช่น 11 ให้เอา 1 มา, 10 ให้เอา 0 มา เป็นต้น)
ใคร ว่างๆ แปลง เป็น โปรแกรม มา ลง หน่อย นะครับ


วิธี เช็ค ความถูกต้องของ  เลขบัตรประชาชน บัตรประจำตัวประชาชน ด้วย php

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


<><><><><><><><><>

รวม Function PHP จากทางบ้าน 



###======================รับค่าจากฟอร์ม==============###
$group_1=$_POST['group_1']; // หมายเลขกลุ่มที่ 1 ( มี1ตัว )
$group_2=$_POST['group_2']; // หมายเลขกลุ่มที่ 2 ( มี4ตัว )
$group_3=$_POST['group_3']; // หมายเลขกลุ่มที่ 3 ( มี5ตัว )
$group_4=$_POST['group_4']; // หมายเลขกลุ่มที่ 4 ( มี2ตัว )
$group_5=$_POST['group_5']; // หมายเลขกลุ่มที่ 5 ( มี1ตัว ) หลักนี้เอาไว้เป็น Check Digit


### =================== นำค่่าที่ได้จากฟอร์มมาแยกสตริงค์ ==============###
$num1=$group_1;
$num2=substr("$group_2",0,1); // ดึงเอาเลขตัวแรก ของกลุ่มที่สองออกมา
$num3=substr("$group_2",1,1); // ดึงเอาเลขตัวที่สอง ของกลุ่มที่สองออกมา
$num4=substr("$group_2",2,1); // ดึงเอาเลขตัวที่สาม ของกลุ่มที่สองออกมา
$num5=substr("$group_2",3,1); // ดึงเอาเลขตัวที่สี่ ของกลุ่มที่สองออกมา
$num6=substr("$group_3",0,1); // ดึงเอาเลขตัวแรก ของกลุ่มที่สามออกมา
$num7=substr("$group_3",1,1); // ดึงเอาเลขตัวที่สอง ของกลุ่มที่สามออกมา
$num8=substr("$group_3",2,1); // ดึงเอาเลขตัวที่สาม ของกลุ่มที่สามออกมา
$num9=substr("$group_3",3,1); // ดึงเอาเลขตัวที่สี่ ของกลุ่มที่สามออกมา
$num10=substr("$group_3",4,1); // ดึงเอาเลขตัวที่5 ของกลุ่มที่สามออกมา
$num11=substr("$group_3",0,1); // ดึงเอาเลขตัวแรก ของกลุ่มที่สี่ออกมา
$num12=substr("$group_2",1,1); // ดึงเอาเลขตัวที่สอง ของกลุ่มที่สี่ออกมา
$num13=$group_5;


### ==== เริ่มต้นคำนวณ Step1 : เอาเลข 12 หลักมาคูณกับเลขประจำหลัก ====###

$cal_num1=$num1*13;
$cal_num2=$num2*12;
$cal_num3=$num3*11;
$cal_num4=$num4*10;
$cal_num5=$num5*9;
$cal_num6=$num6*8;
$cal_num7=$num7*7;
$cal_num8=$num8*6;
$cal_num9=$num9*5;
$cal_num10=$num10*4;
$cal_num11=$num11*3;
$cal_num12=$num12*2;

### ==== Step2 : เอาเอาผลลัพธ์ที่ได้ในการคูณแต่ละครั้งมาบวกกัน ====###
$cal_sum=$cal_num1+$cal_num2+$cal_num3+$cal_num4+$cal_num5+$cal_num6+$cal_num7+$cal_num8+$cal_num9+$cal_num10+$cal_num11+$cal_num12;

### ==== Step3 : นำผลลัพธ์จาก Step2 มา Mod ด้วย 11 ====###
$cal_mod=$cal_sum%11;

### ==== Final เอา 11 ตั้งแล้วลบด้วย ค่าที่ได้จากการ Mod ( Step3) ====###
$cal_2=11-$cal_mod;


if ($group_1<>"" || $group_1<>"" || $group_1<>"" || $group_1<>"" || $group_1<>"" ) {

if ($cal_2==$num13) {
echo "หมายเลขบัตรประชาชนนี้ถูกต้อง";
} else {
echo "หมายเลขบัตรประชาชนนี้ไม่ถูกต้อง";
}
}

?>


นำโค้ดที่ได้ไปเซฟเป็น ไฟล์ชื่อ index.php
สงสัยตรงไหน MSN: four_chong@hotmail.com

ความคิดเห็น

ความคิดเห็นที่ 1
โค้ดยาวจัง เขียนแบบนี้แทนได้มะอ่ะ

ความคิดเห็นที่ 2
ตัดทิ้งซะงั้น

เอาใหม่อีกรอบ

// $personID = “xxxxxxxxxxxxx”;
$rev = strrev($personID); // reverse string ขั้นที่ 0 เตรียมตัว
$total = 0;
for($i=1;$i<13;$i++) // ขั้นตอนที่ 1 - เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน
{
$mul = $i +1;
$count = $rev[$i]*$mul; // ขั้นตอนที่ 2 - เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน
$total = $total + $count; // ขั้นตอนที่ 3 - เอาผลคูณทั้ง 12 ตัวมา บวกกันทั้งหมด
}
$mod = $total % 11; //ขั้นตอนที่ 4 - เอาเลขที่ได้จากขั้นตอนที่ 3 มา mod 11 (หารเอาเศษ)
$sub = 11 - $mod; //ขั้นตอนที่ 5 - เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 4
$check_digit = $sub % 10; //ถ้าเกิด ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit
ความคิดเห็นที่ 3
ขอบคุณครับ