Copyright © 2003-2010
By Suthep Sangvirotjanaphat
  Mobile: 089-967-2200, 081-915-7816
Phone: 0-2992-4877   Fax: 0-2992-4878
Fast Contact Us

GreatFriends.Biz Community

Custom Search
Copy เพื่ออ้างอิงถึงข้อความนี้:
 MESSAGE #107170 (อ่าน 4,939 ครั้ง)

ตรวจเลขบัตรประชาชน

Tags: Windows, C#
ไม่ทราบว่าจะทำยังไงถึงจะสามารถตรวจสอบเลขบัตรประชาชน ว่าเลขบัตรประชาชน13 หลักนั้นถูกต้อง ได้อย่างไรครับ
 
ขอบคุณครับ
 
 


tokinava วันที่ส่ง: 26 พ.ค. 52 20:23 GMT+7
วันที่ปรับล่าสุด: 25 เม.ย. 53 13:37 GMT+7
REPLY #1 (107179)
1. ตัวเลขบนบัตรประชาชนจะมีทั้งหมด 13 หลัก นำเลขใน 12 หลักแรก มาคูณกับเลขประจำตำแหน่ง (เลขประจำหลักได้แก่ 13 บวก 1 ลบด้วยตำแหน่งที่)
จะได้ตัวเลขประจำตำแหน่งดังนี้

ตำแหน่งที่ เลขประจำตำแหน่ง การคำนวณ
1 13 13+1-1
2 12 13+1-2
3 11 13+1-3
4 10 13+1-4
5 9 13+1-5
6 8 13+1-6
7 7 13+1-7
8 6 13+1-8
9 5 13+1-9
10 4 13+1-10
11 3 13+1-11
12 2 13+1-12



** 13 ที่ใช้ในการคำนวณคือจำนวนตัวเลขทั้งหมดที่ต้องการตรว จสอบ

2. หลังจากนั้นเอาผลคูณของทั้ง 12 หลักมารวมกัน แล้ว modulation (การหารเอาเศษ) ด้วย 11

3. เอาเศษที่ได้จากการหารในข้อ 2 มาลบด้วย 11 เท่านี้ก็ได้เลขที่เป็น Check Digit แล้ว (ถ้าผลจากข้อ 2 ได้ 10 ให้เอาเลขหลักหน่วยเป็น Check Digit ก็คือ 0 นั้นเอง)

ตัวอย่าง 1-2345-67890-12-9
นำไปคูณเลขประจำตำแหน่ง (1*13)+(2*12)+(3*11)+(4*10)+(5*9)+(6*8)+(7*7)+(8*6 )+(9*5)+(0*4)+(1*3)+(2*2) = 352
modulation 11 .... 352%11= 0
นำ 11 ตั้งแล้วลบด้วย 0 11 - 0 = 11 เอาเลขหลักหน่วย ดังนั้น Check Digit คือ 1
อ้าว... นี้มันเลขที่บัตรประชาชนไม่ถูกต้องนี้ ที่ถูกต้องคือ 1-2345-67890-12-1

โดยหลักการคำนวนนี้ สามารถใช้กับเลข 10 หลักอย่างเลขที่บัญชีได้อีกด้วย


ตัวอย่าง 123-4-56789-6
นำไปคูณเลขประจำตำแหน่ง (1*10)+(2*9)+(3*8)+(4*7)+(5*6)+(6*5)+(7*4)+(8*3)+( 9*2) = 210
modulation 8 .... 210%8= 2
นำ 8 ตั้งแล้วลบด้วย 2.... 8 - 2 = 6 เอาเลขหลักหน่วย ดังนั้น Check Digit คือ 6

 
 
 
ขอบคุณครับ


nuttanun4u วันที่ส่ง: 26 พ.ค. 52 23:22 GMT+7
วันที่ปรับล่าสุด: 26 พ.ค. 52 23:22 GMT+7
REPLY #2 (107268)
แล้วจะทำยังไงให้ text box รู้ว่า เอาตัวไหนคูณ อะไร แบบ (1*13)+(2*12) + .... +(2*2) อะครับ
 
ถ้าสะดวก ก็รบกวนขอ code ตัวอย่างหน่อยนะครับ
 
ขอบคูณครับ


tokinava วันที่ส่ง: 27 พ.ค. 52 19:09 GMT+7
วันที่ปรับล่าสุด: 27 พ.ค. 52 19:09 GMT+7
REPLY #3 (107277)

ตัวอย่าง Code ครับ

private Boolean VerifyPeopleID(String PID)

{

    //ตรวจสอบว่าทุก ๆ ตัวอักษรเป็นตัวเลข

    if (PID.ToCharArray().All(c => char.IsNumber(c)) == false)

        return false;

    //ตรวจสอบว่าข้อมูลมีทั้งหมด 13 ตัวอักษร

    if (PID.Trim().Length != 13)

        return false;

 

    int sumValue = 0;

    for (int i = 0; i < PID.Length - 1; i++)

        sumValue += int.Parse(PID[i].ToString()) * (13 - i);

    int v = 11 - (sumValue % 11);

    return PID[12].ToString() == v.ToString();

}
 

private void btnCheckPeopleID_Click(object sender, EventArgs e)

{

    if (VerifyPeopleID(txtPeopleID.Text))

    {

        MessageBox.Show("รหัสบัตรประชาชนถูกต้อง");

    }

    else

    {

        MessageBox.Show("รหัสบัตรประชาชนไม่ถูกต้อง");

    }

}
 
ทดลองดูนะครับ


nuttanun4u วันที่ส่ง: 27 พ.ค. 52 20:42 GMT+7
วันที่ปรับล่าสุด: 27 พ.ค. 52 20:42 GMT+7
REPLY #4 (107285)
ขอบคุณ คุณ nuttanun4u มากเลยนะครับ


tokinava วันที่ส่ง: 27 พ.ค. 52 21:45 GMT+7
วันที่ปรับล่าสุด: 27 พ.ค. 52 21:45 GMT+7
REPLY #5 (107292)
ไม่เป็นไรครับ


nuttanun4u วันที่ส่ง: 27 พ.ค. 52 22:49 GMT+7
วันที่ปรับล่าสุด: 27 พ.ค. 52 22:49 GMT+7
REPLY #6 (121697)

 เพิ่มจาก คุณ nuttanun4u นิด1น่ะครับ

private Boolean VerifyPeopleID(String PID)//เชคเลขบัตรประชาชน

{

string digit = null;

//ตรวจสอบว่าทุก ๆ ตัวอักษรเป็นตัวเลข

if (PID.ToCharArray().All(c => char.IsNumber(c)) == false)

return false;

//ตรวจสอบว่าข้อมูลมีทั้งหมด 13 ตัวอักษร

if (PID.Trim().Length != 13)

return false;

int sumValue = 0;

for (int i = 0; i < PID.Length - 1; i++)

sumValue += int.Parse(PID[i].ToString()) * (13 - i);

int v = 11 - (sumValue % 11);

if (v.ToString().Length == 2)

{

digit = v.ToString().Substring(1, 1);

}

else

{

digit = v.ToString();

}

return PID[12].ToString() == digit;

}

 



shrewd วันที่ส่ง: 22 เม.ย. 53 17:49 GMT+7
วันที่ปรับล่าสุด: 22 เม.ย. 53 17:49 GMT+7
REPLY #7 (121783)
ตัวอย่างสำหรับ VB ครับ

Imports Microsoft.VisualBasic

Public Class CheckID

#Region "--Private--"
    Private _IDNO As String

    Private Function IDCard() As Boolean
        Dim idc As String
        Dim num As Integer = 0
        Dim i As Integer
        Try
            idc = _IDNO.Trim.Replace("-", "")
            For i = 0 To 11
                num += idc.Substring(i, 1) * (13 - i)
            Next
            num = num Mod (11)
            If num = 0 Or num = 1 Then
                If num = 0 Then
                    num = 1
                Else
                    num = 0
                End If
            Else
                num = 11 - num
            End If
            If num = idc.Substring(12, 1) Then
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            Return False
        End Try

    End Function

#End Region

#Region "--Public--"

    Public Property ID_CardNo() As String
        Get
            Return _IDNO
        End Get
        Set(ByVal value As String)
            _IDNO = value
        End Set
    End Property

    Public ReadOnly Property IDPass() As Boolean
        Get
            Return IDCard()
        End Get
    End Property

#End Region

End Class



godedp วันที่ส่ง: 25 เม.ย. 53 13:37 GMT+7
วันที่ปรับล่าสุด: 25 เม.ย. 53 13:37 GMT+7
กระทู้นี้มีอายุเกิน 365 วันแล้ว ท่านจะไม่สามารถตอบกระทู้นี้ได้อีก
ถ้าต้องการสนทนาต่อ กรุณาตั้งเป็นกระทู้ใหม่ได้ในหน้าโฮม
และอาจจะอ้างถึงกระทู้นี้ โดยก๊อปปี้ข้อความในกล่องสีขาวด้านล่างไปแปะในกระทู้ใหม่

copy เพื่ออ้างอิงถึงข้อความนี้:
ตรวจเลขบัตรประชาชน
http://greatfriends.biz?107170


1 พ.ย. 12:03
Online: 66