ไร้คอนเซปต์

Smart Phone Club & Computer Webmaster Programmer => Webmaster Am i : เว็บมาสเตอร์ & โปรแกรมเมอร์ => ข้อความที่เริ่มโดย: อาร์ตทูบี ที่ กรกฎาคม 11, 2012, 11:17:57 AM



หัวข้อ: Script Validate เลขบัตรประชาชนที่ถูกต้อง C#, Java, Java Script
เริ่มหัวข้อโดย: อาร์ตทูบี ที่ กรกฎาคม 11, 2012, 11:17:57 AM
โค๊ด:
private static bool CheckPID(string pid)
         {
             /*
              * หลักที่ 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 หลักแรก
              *
              * สูตรการ Gen เลขบัตรประชาชน
              * 1. คูณตัวเลขในแต่ละหลัก
              *      byte1 * 13
              *      byte2 * 12
              *      byte3 * 11
              *      byte4 * 10
              *      byte5 * 9
              *      byte6 * 8
              *      byte7 * 7
              *      byte8 * 6
              *      byte9 * 5
              *      byte10 * 4
              *      byte11 * 3
              *      byte12 * 2
              * 2. รวมยอดทั้งหมดที่คูณกันในแต่ละหลัก
              * 3. นำผลลัพท์ข้อที่ 2 MOD 11
              * 4. นำผลลัพท์ข้อที่ 3 มา ลบ 11
              * 5. นำผลลัพท์ข้อที่ 4 มา Mod 10
              * 6. ถ้าผลลัพท์ตรงกับหลักสุดท้ายของเลขบัตร
แสดงว่าบัตรถูกต้อง
              */


             Regex rexPersonal = new Regex(@"^[0-9]{13}$");
             if (rexPersonal.IsMatch(pid))
             {
                 int sum = 0;

                 /* x13, x12, x11, ... */
                 for (int i = 0; i < 12; i++)
                 {
                     sum += int.Parse(pid[i].ToString()) * (13 - i);
                 }

                 /* complements(12, sum mod 11) */
                 return int.Parse(pid[12].ToString()) == ((11 - (sum %
11)) % 10);
             }
             return false;
         }

โค๊ด:

ในส่วนนี้เป็นต้นฉบับภาษา Java ครับ
/*
   * PIDCheck - Thailand population ID validation engine.
   * Copyright (C) 2005 Shuetrakunpaibun C.
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * For a full copy of GNU Lesser General Public License please
download
   * at http://www.gnu.org/licenses/lgpl.htm
   */
function check_digit_id_card(id_card) {
var multi_num = 13;
var str_digit = 0;
var result = 0;
if(id_card.length != 13) {
return false;
}
while(multi_num != 1) {
if(id_card.charAt(str_digit) == Number.NaN) {
return false;
}
result = result + id_card.charAt(str_digit)*multi_num;
multi_num = multi_num - 1;
str_digit = str_digit + 1;
}

result = result % 11;
if(result == 0) result = 10;

result = 11 - result;

if(result == 10) result = 0;

if(result == id_card.charAt(12)) {
return true;
} else {
return false;
}
}

โค๊ด:
ในส่วนนี้เป็น JavaScript ครับ
function check_digit_id_card(id_card) {
var multi_num = 13;
var str_digit = 0;
var result = 0;
if(id_card.length != 13) {
return false;
}
while(multi_num != 1) {
if(id_card.charAt(str_digit) == Number.NaN) {
return false;
}
result = result + id_card.charAt(str_digit)*multi_num;
multi_num = multi_num - 1;
str_digit = str_digit + 1;
}

result = result % 11;
if(result == 0) result = 10;

result = 11 - result;

if(result == 10) result = 0;

if(result == id_card.charAt(12)) {
return true;
} else {
return false;
}
}