การตรวจสอบ เลขบัตรประจำตัวประชาชน ด้วย 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
การตรวจสอบหมายเลขบัตรประจำตัวประชาชน ใช้ตัวเลขหลักที่ 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
ความคิดเห็น
แสดงความคิดเห็น