Archive for February, 2006

17.02.06

เซ็ต MySQL 4.1.X ให้ support thai language

วิธีที่ 1 ในกรณีที่คุณเป็นเจ้าของ server
เข้าไปแก้ไขไฟล์ my.ini (windows) or my.cnf (linux)

[mysqld]
default-character-set=tis620
default-collation=tis620_thai_ci

[client]
default-character-set=tis620

วิธีที่ 2 ในกรณีที่คุณไม่ได้เป็นเจ้าของ server
ต้องทำการเขียนแก้ที่โปรแกรมมิ่ง คือ ก่อนที่กระทำอะไรกับ db ให้ทำการ ดังนี้

$charset = “SET NAMES ’tis620′”;
mysql_query($charset);

$sql = “SELECT firstname, surname FROM member”;
mysql_query($sql);

16.02.06

เช็คเลขหมายบัตรประชาชน

ความหมายแต่ละหลักของเลขหมายบัตรประชาชน
หลักที่ 1 หมายถึงประเภทบุคคลซึ่งมี 8 ประเภท คือ
ประเภทที่ 1 ได้แก่
คนที่เกิดและมีสัญชาติไทย ได้แจ้งเกิดภายในกำหนดเวล
(ตั้งแต่ 1 มกราคม 2527)
ประเภทที่ 2 ได้แก่
คนที่เกิดและมีสัญชาติไทย ได้แจ้งเกิดเกินกำหนดเวลา
(ตั้งแต่ 1 มกราคม 2527)
ประเภทที่ 3 ได้แก่
คนไทยและคนต่างด้าวที่มีใบสำคัญประจำตัวคนต่างด้าว และมีที่อยู่ในทะเบียนบ้าน ในสมัยเริ่มแรก (1 มกราคม - 31 พฤษภาคม 2527)
ประเภทที่ 4 ได้แก่
คนไทยและคนต่างด้าวที่มีใบสำคัญคนต่างด้าวแต่แจ้งย้ายเข้า โดยยังไม่มีเลขประจำตัวประชาชนในสมัยเริ่มแรก
(1 มกราคม - 31 พฤษภาคม 2527)
ประเภทที่ 5 ได้แก่
คนไทยที่ได้รับอนุมัติให้เพิ่มชื่อเข้าในทะเบียนบ้านในกรณีตกสำรวจหรือกรณีอื่นๆ
ประเภทที่ 6 ได้แก่
ผู้ที่เข้าเมืองโดยไม่ชอบด้วยกฏหมาย และผู้ที่เข้าเมืองโดยชอบด้วยกฏหมาย แต่จะอยู่ในลักษณะชั่วคราว
ประเภทที่ 7 ได้แก่
บุตรของบุคคลประเภทที่ 6 ซึ่งเกิดในประเทศไทย
ประเภทที่ 8 ได้แก่
คนต่างด้าวที่เข้าเมืองโดยถูกต้องตามกฏหมาย คือ ได้รับใบสำคัญประจำตัวคนต่างด้าว
คนที่ได้รับการแปลงสัญชาติเป็นสัญชาติไทย และคนที่ได้รับการให้สัญชาติไทย

หลักที่ 2 ถึงหลักที่ 5 หมายถึงรหัสของสำนักทะเบียนที่ท่านมีชื่อในทะเบียนบ้านในขณะให้เลข สำหรับเด็กเกิดใหม่จะหมายถึงถิ่นที่เกิดเลยทีเดียว
โดยหลักที่ 2 และ 3 หมายถึงจังหวัด
หลักที่ 4 และ 5 หมายถึงอำเภอ หรือเทศบาล

หลักที่ 6 ถึงหลักที่ 10 หมายถึงกลุ่มที่ของบุคคลแต่ละประเภทตามหลักแรก หรือหมายถึงเล่มที่ ของสูติบัตร แล้วแต่กรณี
หลักที่ 11 และ 12 หมายถึงลำดับที่ของบุคคลในแต่ละกลุ่มประเภท หรือหมายถึงใบที่ของสูติบัตรแต่ละเล่ม แล้วแต่กรณี
หลักที่ 13 คือ ตัวเลขตรวจสอบความถูกต้องของเลข 12 หลักแรก

หลักแนวคิดในการเขียนโปรแกรม
สมมุติเลขที่บัตร
345020041569-8
เลข 8 คือ bit check ครับ
การคำนวนก็
3*13+4*12+5*11+0*10+2*9+0*8+0*7+4*6+1*5+5*4+6*3+ 9*2

นำผลลัพธ์มารวมกัน ครับ ในที่นี้จะได้ 245
นำ 245 มา MOD ด้วย 11 จะได้ 3

หลังจาก Mod ด้วย 11 แล้ว ให้ตรวจสอบผลลัพธ์ก่อนครับ
ถ้าได้ 1 ให้เปลี่ยนเป็น 0
ถ้าได้ 0 ให้เปลี่ยนเป็น 1
สามารถใช้ mod 10 แทนก็ได้
ถ้าเป็นเลขอื่นๆ ให้เอา 11 ตั้งแล้วนำค่าไป ลบ

นำ 11 ลบด้วย 3 จะได้ 8 พอดีครับ
ถ้าที่ได้ตรงกับ bit check ก็แสดงความหมายเลขบัตรนี้ถูกต้องครับ

อัลกรอริทึม
หลัก 13=(11-(ผลรวม(หลัก1*13,หลัก2*12,…,หลัก12*2) mod 11)) mod 10
หลัก 13=(11-(ผลรวม(3*13+4*12+…9*2) mod 11)) mod 10
หลัก 13=(11-(245 mod 11)) mod 10
หลัก 13=(11-(3)) mod 10
หลัก 13=8 mod 10
หลัก 13=8

มาดูโปรแกรมมิ่งที่เขียนตามอัลกรอรึทึมกันบ้าง

function checkSSN($ssn) {
$ssn = trim($ssn);
$ssn = str_replace(”-”, “”, $ssn);
$len = strlen($ssn);

if ($len != 13) {
echo “Error Social Security Number”;
exit();
}

$sum=0;
$c = 0;
for($i = $len; $i > 1; $i–) {
$sum += (int)(substr($ssn, $c, 1)) * $i;
$c++;
}

$mod = (int)($sum % 11);
$result = (11 - $mod) % 10;

$checkbit = substr($ssn, -1, 1);
if ($result == $checkbit) {
echo “Social security number : $ssn”;

echo “Result : True”;

return true;
} else {
echo “Social security number : $ssn”;

echo “Result : False”;

return false;
}
}

Copyright 2008 by Global Technology Integrated