ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4028|ตอบกลับ: 2

VB.Net ให้อ่านบัตรประชาชนอัตโนมัตเวลาเสียบบัตรฯ

[คัดลอกลิงก์]

2

กระทู้

3

โพสต์

202

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
202

VB.Net เราต้องการให้โปรแกรมที่เราเขียน อ่านบัตรประชาชนอัตโนมัตเวลาเสียบบัตรฯ เข้ากับเคร่องอ่านบัตรประชาชน เราจะสั่งยังไงครับ

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973
โพสต์ 2020-3-31 20:14:48 | ดูโพสต์ทั้งหมด

ต้องดูจาก SDK (Software Development Kit) ซึ่งเป็นชุดเครื่องมือที่ทางผู้ผลิตเขาให้มาครับ ซึ่งแต่ละค่ายก็จะมีความแตกต่างกันออกไปในการดึงข้อมูล เพื่อนำมาแสดงผลครับ
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

12

โพสต์

155

เครดิต

Member

Rank: 2

เครดิต
155
โพสต์ 2020-5-5 15:54:43 | ดูโพสต์ทั้งหมด

แก้ไขครั้งสุดท้ายโดย thawatchai-sena เมื่อ 2020-5-5 16:21

ThaiID.png

1. อ่านรายชื่อเครื่องอ่านบัตรประชาชนลงบน ComboBox
2. ทำการสั่ง Monitor ด้วยคำสั่ง  idcard.MonitorStart()
3. ผูก Sub ReadDataWithPhoto เข้ากับเหตุการณ์ eventCardInserted ด้วยคำสั่ง  
AddHandler idcard.eventCardInserted, AddressOf ReadDataWithPhoto
ซึ่งจะทำงานเมื่อมีการเสียบบัตร
4. ผูก Sub Clear เข้ากับเหตุการณ์ eventCardRemoved ด้วยคำสั่ง (ทำงานขณะถอดบัตรประชาชน)
AddHandler idcard.eventCardRemoved, AddressOf Clear
5.ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress ด้วยคำสั่ง (ทำงานขณะอ่านรูปบนบัตรประชาชน)
AddHandler idcard.eventPhotoProgress, AddressOf photoProgress

มาดูโค้ดตัวอย่างกันครับ
ประกาศตัวแปรข้างบนสุดสำหรับอ้างอิงไปยัง Lib ของ ThaiIDCard
Private WithEvents idcard As New ThaiIDCard

สร้าง ComboBox สำหรับเก็บชื่อของเครื่องอ่านบัตร จากนั้นเพิ่มโค้ด และเรียกใช้ในเหตุการณ์ Form_Load ด้วยวิธี ListOfDevices(ชื่อของ ComboBox)    'อ่านรายชื่อเครื่องอ่านบัตรลงไปแสดงบน ComboBox
    Sub ListOfDevices(ByVal DeviceCmb As ComboBox)
     DeviceCmb.Items.Clear()
        DeviceCmb.SelectedIndex = -1
        DeviceCmb.SelectedText = String.Empty
        DeviceCmb.Text = String.Empty
        DeviceCmb.Refresh()
        Dim idcard As ThaiIDCard = New ThaiIDCard()
        Dim readers As String() = idcard.GetReaders()
        If readers Is Nothing Then Return
        For Each r As String In readers
            DeviceCmb.Items.Add(r)
        Next
        DeviceCmb.DroppedDown = True
    End Sub

จากนั้นเพิ่ม Checkbox 1 อัน และใส่โค้ดนี้เข้าไปครับ เช่นตั้งชื่อ Combobox ว่า "ChkMonitor" โค้ดก็ดังนี้.-
Private Sub ChkMonitor_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkMonitor.CheckedChanged
        If ChkMonitor.Checked = True Then

            If ChkMonitor.Checked Then
                If cmbDiviceList.SelectedItem Is Nothing Then
                    MessageBox.Show("ยังไม่ได้เลือกเครื่องอ่านบัตรสำหรับอ่านข้อมูล !", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    ChkMonitor.Checked = False
                    Return
                End If

                'เริ่มทำการ Monitor เครื่องอ่านบัตรประชาชน
                idcard.MonitorStart(cmbDiviceList.SelectedItem.ToString())

                'ประกาศตัวแปรเก็บข้อมูลบัตร
                Dim PersonalData As New Personal

                'สั่งให้อ่านข้อมูล+รูปถ่ายบนบัตร
                PersonalData = idcard.readAllPhoto

                'ตรวจสอบว่่าส่งค่าว่างเปล่ากลับมาหรือไม่ และแสดงผลข้อผิดพลาด
                If PersonalData Is Nothing Then
                    If idcard.ErrorCode() > 0 Then
                        MessageBox.Show(idcard.[Error]())
                    End If
                    Return
                End If

                'เพิ่มตัวควบคุมฟังชั่นสำหรับ รายละเอียดดังนี้.-
                ' eventCardInserted เหตุการณ์เมื่อเสียบบัตร
                ' eventCardRemoved เหตุการณ์เมื่อถอดบัตร
                ' eventPhotoProgress เหตุการณ์ขณะอ่านบัตรประชาชนให้แสดง ProgressBar

                'ผูก Sub ReadDataWithPhoto เข้ากับเหตุการณ์ eventCardInserted
                AddHandler idcard.eventCardInserted, AddressOf ReadDataWithPhoto

                'ผูก Sub Clear เข้ากับเหตุการณ์ eventCardRemoved
                AddHandler idcard.eventCardRemoved, AddressOf Clear

                'ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress
                AddHandler idcard.eventPhotoProgress, AddressOf photoProgress

            Else
                If cmbDiviceList.SelectedItem IsNot Nothing Then idcard.MonitorStop(cmbDiviceList.SelectedItem.ToString())
            End If
        End If
    End Sub

จากนั้นเพิ่มอีก 3 Sub ใน Class ฟอร์มนี้ คือ
Sub ReadDataWithPhoto()
       Dim PersonalData As New Personal

        'ผูก Sub photoProgress เข้ากับเหตุการณ์ eventPhotoProgress
        AddHandler idcard.eventPhotoProgress, AddressOf photoProgress

        PersonalData = idcard.readAllPhoto
        ToolStripProgressBar1.Visible = True

        If Not PersonalData Is Nothing Then
            With PersonalData
                lblCitizenID.Text = .Citizenid 'เลขบัตรประชาชน

                'EN
                txtPrefixEN.Text = .En_Prefix
                txtFirstnameEN.Text = .En_Firstname
                txtLastnameEN.Text = .En_Lastname

                'TH
                txtPrefix.Text = .Th_Prefix
                txtFirstName.Text = .Th_Firstname
                txtLastName.Text = .Th_Lastname

                'ว/ด/ป เกิด
                txtBirthDate.Text = .Birthday.ToString("dd/MM/yyyy")

                'วันออกบัตร
                txtIssue.Text = .Issue.ToString("dd/MM/yyyy")

                'วันหมดอายุบัตร
                txtExpire.Text = .Expire.ToString("dd/MM/yyyy")

                txtAddress.Text = .Address
                txtHouseNo.Text = .addrHouseNo
                txtVillage.Text = .addrVillageNo
                txtLane.Text = .addrLane
                txtRoad.Text = .addrRoad
                txtTambon.Text = .addrTambol
                txtAmphur.Text = .addrAmphur
                txtProvince.Text = .addrProvince
                PictureBox1.Image = .PhotoBitmap

            End With

            LogLine("อ่านข้อมูลสำเร็จ")

        ElseIf idcard.ErrorCode > 0 Then
            Select Case idcard.ErrorCode
                Case Is = 256
                    MsgBox("ยังไม่ได้เชื่อมต่อเครื่องอ่านบัตรประชาชน" & vbCrLf & idcard.Error, vbOKOnly + vbCritical, "Error")
                Case Else
                    MsgBox(vbCrLf & idcard.Error, vbOKOnly + vbCritical, "Error")
            End Select
        End If

        'ปิดการแสดง ProgressBar
        ToolStripProgressBar1.Visible = False

    End Sub

'เคลียร์ค่าบน Control ให้เป็นค่าว่าง
    Sub Clear()
        lblCitizenID.Text = ""
        'ใส่คำสั่งเคลียร์ค่าบน Control ต่าง ๆ
        PictureBox1.Image = Nothing
    End Sub

สร้าง ProgressBar ขึ้นมาอีก 1 อันตั้งชื่อว่า PhotoProgressBar1
'แสดง ProgressBard ขณะอ่านรูปถ่ายบนหน้าบัตร
    Private Sub photoProgress(ByVal value As Integer, ByVal maximum As Integer)

        If txtLog.InvokeRequired Then
            If ToolStripProgressBar1.Maximum <> maximum Then
                PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
                                                                    PhotoProgressBar1.Maximum = maximum
                                                                End Function))
            End If

            If ToolStripProgressBar1.Maximum > value Then
                PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
                                                                    PhotoProgressBar1.Value = value + 1
                                                                End Function))
                PhotoProgressBar1.BeginInvoke(New MethodInvoker(Function()
                                                                    PhotoProgressBar1.Value = value
                                                                End Function))
            End If

        Else
            If ToolStripProgressBar1.Maximum <> maximum Then ToolStripProgressBar1.Maximum = maximum
            If ToolStripProgressBar1.Maximum > value Then ToolStripProgressBar1.Value = value + 1
            ToolStripProgressBar1.Value = value
        End If

    End Sub















ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 21:52 , Processed in 0.202433 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้