ผมเจอใน web เลย copy มาให้ดู
ผมเข้าไปดูที่
http://www.siamdev.com/Board/question.asp?QID=344 เลยเกิดความคิดที่จะสร้างสูตรอาร์เรย์เพื่อตรวจสอบหมายเลขประชาชนครับ มาดู Algorithm ของการเช็ค Digit เลขบัตรประชาชนคนไทย ก่อน
3450200415698
เลข 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
นำ 11 ลบด้วย 3 จะได้ 8 พอดีครับ
ถ้าที่ได้ตรงกับ bit check ก็แสดงความหมายเลขบัตรนี้ถูกต้องครับ
ถ้าเราสร้างเป็นสูตร อาร์เรย์ จะต้องใช้ฟังก์ชัน VALUE MID ROW INDIRECT ครับ
ขั้นตอน
1 เราแยกตัวเลขออกโดยใช้ฟังก์ชัน MID
2 เมื่อแยกแล้วต้องแปลงตัวเลขที่แยกออกมาซึ่งเป็น Text ให้เป็นค่าจริงๆ ด้วยฟังก์ชัน VALUE
3 ทำการคูณตัวเลขที่แยกแต่ละตัวได้ด้วยเลขตำแหน่งซึ่งลดลงครั้งละ 1 ไปถึงหลักที่ 12 เช่น เริ่มตันหลักแรก คูณด้วย 13 หลักต่อไปคูณด้วย 12 หลักต่อไปคูณด้วย 11 เป็นต้น
4 รวมเลขผลคูณที่คำนวณได้
5 หาเศษของค่าที่คำนวณได้ในขั้นที่ 4 ด้วย 11
6 นำ 11 ลบผลลัพธ์ของ 5
ดังนั้นสูตรอารเรย์สุดท้ายคือ
Code:
{=11-MOD(SUM((VALUE(MID(CitizenID,ROW(INDIRECT("1:12")),1)))*(14-ROW(INDIRECT("1:12")))),11)}