วันอาทิตย์ที่ 3 สิงหาคม พ.ศ. 2557

การตรวจสอบ เลขบัตรประจำตัวประชาชน ด้วย Access VBA

การตรวจสอบ เลขบัตรประจำตัวประชาชน

การตรวจสอบหมายเลขบัตรประจำตัวประชาชน ใช้ตัวเลขหลักที่ 13 เป็นตัวตรวจสอบ

ตัวเลขหลักที่ 13 เกิดจากการนำเอาตัวเลข 12 ตัวแรก มาคำนวณ ตามวิธีการที่กำหนด แล้วจะได้ตัวเลขหลักที่ 13 ซึ่งมีวิธีการคำนวณ ดังนี้

ขั้นที่ 1 หาผลคูณของตัวเลขหลักที่ 1-12 กับ ตัวเลข ตั้งแต่ 12 ถึง 1 ดังนี้
            ตัวเลขหลักที่ 1 X 12
            ตัวเลขหลักที่ 2 X 11
            ตัวเลขหลักที่ 3 X 10
            ตัวเลขหลักที่ 4 X 9
            ตัวเลขหลักที่ 5 X 8
            ตัวเลขหลักที่ 6 X 7
            ตัวเลขหลักที่ 7 X 6
            ตัวเลขหลักที่ 8 X 5
            ตัวเลขหลักที่ 9 X 4
            ตัวเลขหลักที่ 10 X 3
            ตัวเลขหลักที่ 11 X 2
            ตัวเลขหลักที่ 12 X 1

ขั้นที่ 2 เอาผลคูณที่ได้ทั้งหมด มารวมกัน
            (ตัวเลขหลักที่ 1 X 12)+(ตัวเลขหลักที่ 2 X 11)+(ตัวเลขหลักที่ 3 X 10)+(ตัวเลขหลักที่ 4 X 9)+
            (ตัวเลขหลักที่ 5 X 8)+(ตัวเลขหลักที่ 6 X 7)+(ตัวเลขหลักที่ 7 X 6)+(ตัวเลขหลักที่ 8 X 5)+
            (ตัวเลขหลักที่ 9 X 4)+(ตัวเลขหลักที่ 10 X 3)+(ตัวเลขหลักที่ 11 X 2)+(ตัวเลขหลักที่ 12 X 1)

ขั้นที่ 3 เอาผลที่ได้จากขั้นที่ 2 ไปหารด้วย 11 เหลือเศษเท่าไร เก็บเอาเศษไปใช้ในขั้นที่ 4

ขั้นที่ 4 เอาเศษที่ได้จากขั้นที่ 3 ไปลบออกจาก 11 ผลลัพธ์ที่ได้ คือ ตัวเลขหลักที่ 13

ถ้าเขียนเป็น ฟังก์ชัน ของ vba จะได้ประมาณนี้

Function thaiID_check(whatID As String) As Boolean

Dim sumAll As Integer
Dim modResult As Integer
Dim lastDigit As Integer

   sumAll = 0
   If Len(whatID) <> 13 Then   'ตรวจสอบความยาว 13 หลักหรือไม่
        thaiID_check = False
        Exit Function
   End If
   For i = 1 To 12   ' หาผลรวมของผลคูณ ตามขั้นที่ 1 และ 2
        sumAll = sumAll + (Val(Mid(whatID, i, 1)) * (14 - i))
   Next
   modResult = sumAll Mod 11  ' ขั้นที่ 3
   lastDigit = 11 - modResult   ' ขั้นที่ 4

   If lastDigit <> Right(whatID, 1) Then   ' ตรวจสอบว่าเท่ากับเลขตัวสุดท้ายหรือไม่
        thaiID_check = False
   Else
        thaiID_check = True
   End If

End Function

วิธีการเรียกใช้งาน

Dim myID As String
Dim isValidID As Boolean

myID = ("3730322234567")
isValidID = thaiID_check(myID)

If (isValidID = False) Then
     call MsgBox("หมายเลขบัตรประชาชนไม่ถูกต้อง")
Else
     call MsgBox("หมายเลขถูกต้อง")
End If




         

ไม่มีความคิดเห็น:

แสดงความคิดเห็น