kriangsak โพสต์ 2020-3-31 16:23:18

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

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

thongkorn โพสต์ 2020-3-31 20:14:48

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

thawatchai-sena โพสต์ 2020-5-5 15:54:43

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



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.())
                  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















หน้า: [1]
ดูในรูปแบบกติ: VB.Net ให้อ่านบัตรประชาชนอัตโนมัตเวลาเสียบบัตรฯ