mysql - 我总是遇到指纹未验证的情况

标签 mysql vb.net fingerprint

每当我扫描指纹进行验证时,即使我已经将该指纹注册到数据库中,我也会收到“指纹未验证”消息。这是表单加载时捕获的代码

这是表单加载时捕获的代码

Private Sub Me_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

    Init()
    StartCapture()

    Dim conn As New MySqlConnection
    Dim cmd As New MySqlCommand
    Dim sql As String
    conn.ConnectionString = "**** "
    conn.Open()
    sql = ("SELECT * FROM new_case_file")
    cmd.Connection = conn
    cmd.CommandText = sql
    Dim rdr As MySqlDataReader = cmd.ExecuteReader()

    While (rdr.Read())
        Dim MemStream As IO.MemoryStream
        Dim fpBytes As Byte()

        fpBytes = rdr("FingerPrint")
        MemStream = New IO.MemoryStream(fpBytes)

        Dim templa8 As DPFP.Template = New DPFP.Template()
        templa8.DeSerialize(MemStream)
        Dim serializedTemplate As Byte() = MemStream.ToArray

        Dim tmpObj As New AppData
        Dim FPList As List(Of AppData) = New List(Of AppData)
        'tmpObj.No = rdr("No").ToString()
        'tmpObj.Template = templa8
        'FPList.Add(tmpObj)
    End While
    conn.Close()

End Sub

这里是验证代码。当我单击按钮时,它应该进行验证,因为我在按钮单击子中调用了子 verifyControl_Complete

Private Sub verifyControl_OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, ByRef EventHandlerStatus As
DPFP.Gui.EventHandlerStatus) Handles verifyControl.OnComplete


    Dim printFound As Boolean = False
    'Dim printFound As Boolean = True
    'Dim printFound As Boolean = False
    Dim VerifiedFPData = New AppData
    Dim FPList As List(Of AppData) = New List(Of AppData)
    Try

        For Each FPData As AppData In FPList
            Dim tmplateData As New DPFP.Template
            'tmplateData = FPData.Template
            Dim compareTo As New DPFP.FeatureSet
            compareTo = FeatureSet

            Dim ver As New DPFP.Verification.Verification()
            Dim res As New DPFP.Verification.Verification.Result()

            If Not tmplateData Is Nothing Then
                ver.Verify(FeatureSet, tmplateData, res)

                If res.Verified Then
                    EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success
                    printFound = True
                    VerifiedFPData = FPData

                    Exit For

                End If
            End If

        Next

    Catch ex As Exception
        MessageBox.Show("Error")
    End Try


    If printFound Then
        MsgBox("Verified")
    Else
        EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure

        MsgBox("Not Verified")
    End If

End Sub


Private Sub btnverifyfp_Click(sender As Object, e As EventArgs) Handles btnverifyfp.Click
    verifyControl_OnComplete(Nothing, Nothing, Nothing)
End Sub 

这是我保存指纹时使用的代码

Dim fingerprintData As MemoryStream = New MemoryStream
Enroller.Template.Serialize(fingerprintData)
Dim serializedTemplate As Byte() = fingerprintData.ToArray()
Dim bytes() As Byte = serializedTemplate

最佳答案

试试这个:

'THIS NEEDS TO BE AT THE CLASS-LEVEL, AS A MEMBER
Private FPList As New List(Of AppData)

Private Sub Me_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) 
                                                           Handles MyBase.Load    
    Init()
    StartCapture()

    Dim sql As String = "SELECT * FROM new_case_file"
    Using conn As New MySqlConnection("**** "), _
          cmd As New MySqlCommand(sql, conn)

        conn.Open()
        Using rdr As MySqlDataReader = cmd.ExecuteReader()
            FPList.Clear()
            While (rdr.Read())
                Dim tmpObj As New AppData
                tmpObj.No = rdr("No").ToString()

                Dim fpBytes As Byte() = rdr("FingerPrint")
                Using MemStream As New IO.MemoryStream(fpBytes)

                    Dim templa8 As New DPFP.Template()
                    templa8.DeSerialize(MemStream)
                End Using
                tmpObj.Template = templa8

                FPList.Add(tmpObj)
            End While
            rdr.Close()
        End Using
    End Using
End Sub

现在以后的其他代码可以使用相同的 FPList 变量。如果您发现自己在其他地方编写了 New List(Of AppData),那么您就做错了。

AppData 类应如下所示:

Public Class AppData
    Public Property No As String   
    Public Property Template As DFFP.Template
End Class

最后是验证码:

Private Sub verifyControl_OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, 
                                     ByRef EventHandlerStatus As DPFP.Gui.EventHandlerStatus)
     Handles verifyControl.OnComplete

    Try

        Dim ver As New DPFP.Verification.Verification()
        Dim res As New DPFP.Verification.Verification.Result()

        For Each FPData As AppData In FPList
            If FPData.Template Is Nothing Then Continue

            ver.Verify(FeatureSet, FPData.Template, res)
            If res.Verified Then
                EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success
                MsgBox("Verified")
                Return
            End If

        Next FPDAta

    Catch ex As Exception
        MessageBox.Show("Error")
    End Try

    EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure
    MsgBox("Not Verified")
End Sub

再说一次...我们无权访问您的 API 文档、测试数据或设备。这意味着我们在这里试图帮助你是盲目的。这可能存在一些问题,您必须能够进行故障排除和调试。

关于mysql - 我总是遇到指纹未验证的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46732391/

相关文章:

Android joda 时间从 24 转换为 12

wpf - 按钮命令未在 ListView 组标题中触发

c++ - 如何绘制场方位图?我有渐变。 OpenCV C++

android - 华为P9 lite指纹支持

mysql - 使用 limit 和 where 子句进行分页

javascript - 为什么Chrome在加载后将我的页面称为XHR,并执行MySQLi插入两次?

php - 在 xampp 中找不到对象

c# - 将 C# PageAsyncTask() 转换为 VB.Net 等效项时出现问题

mysql - 使用 VB 连接 SQL 时出错

android - Android P 上的 Fingerprint BiometricPrompt 从 View