读取指纹。

union_V 2010-07-19 01:30:39
在C#中怎么能简单的实现从指纹仪中读取指纹,进行指纹的对比?有没有简单易懂点的方法。。。
...全文
422 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
leavemaple 2010-07-21
  • 打赏
  • 举报
回复
翻译个啥,人家拿C++写,你封装成DLL调用就是了。C#还可以直接读取硬件?调API,串口啊,麻烦死了。API还得到处,C++直接写。去拿他的DLL就是了。
liu_shang_fei 2010-07-21
  • 打赏
  • 举报
回复
公司也想弄,但我不会写。学习学习。
union_V 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 leavemaple 的回复:]
翻译个啥,人家拿C++写,你封装成DLL调用就是了。C#还可以直接读取硬件?调API,串口啊,麻烦死了。API还得到处,C++直接写。去拿他的DLL就是了。
[/Quote]这哥们说的。能说的详细一点不。
lsq667 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyl_leilei 的回复:]
提供指纹仪器的厂商会给你提供接口的,到时候你调用api执行方法就可以进行匹配了。。。
[/Quote]一般都是厂家直接提供接口的,或者指纹仪直接通过串口通讯,传值回来
xionao_1990 2010-07-20
  • 打赏
  • 举报
回复
好像很复杂,帮顶!!!
t20100504t 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 computerfox 的回复:]
1、厂商要提供硬件的API,然你可以读取到指纹。
2、我估计厂商应该又有API直接实现了对比,否则指纹的设备不就是图像扫描了,何来指纹识别呀?

3、如果你自己研究指纹识别,那么涉及到图像的识别处理了。
[/Quote]

up
union_V 2010-07-20
  • 打赏
  • 举报
回复
我有一串C++代码。。不知道谁能帮忙翻译成C#的。。
//{{AFX_INCLUDES()
#include "doronuruactivex.h"
//}}AFX_INCLUDES
#if !defined(AFX_FINGERPRINTAUTHENDLG_H__57AE9845_17DD_4DCA_A50A_68E222256922__INCLUDED_)
#define AFX_FINGERPRINTAUTHENDLG_H__57AE9845_17DD_4DCA_A50A_68E222256922__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// FingerprintAuthenDlg.h : header file
//

#include "tcmfpctl.h"
#include "doronuruactivex.h"

/////////////////////////////////////////////////////////////////////////////
// CFingerprintAuthenDlg dialog

class CFingerprintAuthenDlg : public CDialog
{
// Construction
public:
CFingerprintAuthenDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CFingerprintAuthenDlg)
enum { IDD = IDD_FINGERPRINTAUTHENDLG_DIALOG };
CString m_sPIdNo;
CString m_sName;
CString m_sExamIdNo;
CString m_sExamAutoType;
CString m_sVerificationStatus;
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFingerprintAuthenDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
char m_sFingerprint1[FINGERPRINT_LEN];
char m_sFingerprint2[FINGERPRINT_LEN];
CString m_sPhotoFileName;

bool m_bIsSnapped;
bool m_bIsAuthenticated;
CTCMFPCtl *m_pCTCMFPCtrl;
CDoronUruActiveX *m_pCDoronUruActiveXCtrl;

// Generated message map functions
//{{AFX_MSG(CFingerprintAuthenDlg)
virtual BOOL OnInitDialog();
afx_msg void OnButtonSnap();
virtual void OnOK();
virtual void OnCancel();
afx_msg void OnNotifyDoronuruactivexctrlFp(short SensorNo, short NotifyCode);
afx_msg void OnPaint();
DECLARE_EVENTSINK_MAP()
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_FINGERPRINTAUTHENDLG_H__57AE9845_17DD_4DCA_A50A_68E222256922__INCLUDED_)
// FingerprintAuthenDlg.cpp : implementation file
//

#include "stdafx.h"
#include "garage.h"
#include "GarageDlg.h"
#include "FingerprintAuthenDlg.h"
#include "mmsystem.h"
#include "CImage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern char gFingerprintAuthenAudioPrompt[INI_KEY_LEN];
extern int gFingerprintDevice;
/////////////////////////////////////////////////////////////////////////////
// CFingerprintAuthenDlg dialog


CFingerprintAuthenDlg::CFingerprintAuthenDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFingerprintAuthenDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFingerprintAuthenDlg)
m_sPIdNo = _T("");
m_sName = _T("");
m_sExamIdNo = _T("");
m_sExamAutoType = _T("");
m_sVerificationStatus = _T("");
//}}AFX_DATA_INIT

CGarageDlg *pDlg = NULL;
if(pParent)
pDlg = (CGarageDlg*) pParent;

if(!pDlg)
return;

m_sExamAutoType = pDlg->m_sExamAutoType;
m_sExamIdNo = pDlg->m_sExamIdNo;
m_sName = pDlg->m_sName;
m_sPIdNo = pDlg->m_sPIdNo;
m_sPhotoFileName = pDlg->m_sPhotoFileName;
strncpy(m_sFingerprint1, pDlg->m_Exam.m_Examinee.GetFingerprint1(), FINGERPRINT_LEN);
strncpy(m_sFingerprint2, pDlg->m_Exam.m_Examinee.GetFingerprint2(), FINGERPRINT_LEN);

m_bIsSnapped = false;
m_bIsAuthenticated = false;
m_pCTCMFPCtrl = NULL;
m_pCDoronUruActiveXCtrl = NULL;
}


void CFingerprintAuthenDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFingerprintAuthenDlg)
DDX_Text(pDX, IDC_EDIT_PID_NO, m_sPIdNo);
DDX_Text(pDX, IDC_EDIT_NAME, m_sName);
DDX_Text(pDX, IDC_EDIT_EXAMID_NO, m_sExamIdNo);
DDX_Text(pDX, IDC_EDIT_EXAM_AUTO_TYPE, m_sExamAutoType);
DDX_Text(pDX, IDC_EDIT_VERIFICATION_STATUS, m_sVerificationStatus);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFingerprintAuthenDlg, CDialog)
//{{AFX_MSG_MAP(CFingerprintAuthenDlg)
ON_BN_CLICKED(IDC_BUTTON_SNAP, OnButtonSnap)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFingerprintAuthenDlg message handlers

BOOL CFingerprintAuthenDlg::OnInitDialog()
{
CDialog::OnInitDialog();

if(!strcmp(m_sFingerprint1, "") && !strcmp(m_sFingerprint2, ""))
m_sVerificationStatus = "数据库中没有该考生的指纹数据!";

if(gFingerprintDevice == 0)
{
m_pCTCMFPCtrl = (CTCMFPCtl*)GetDlgItem(IDC_TCMFPCTLCTRL_FP);
if(m_pCTCMFPCtrl)
if(m_pCTCMFPCtrl->Connect() != 1)
m_sVerificationStatus = "连接指纹仪失败!";
else
{
//PlaySound(gFingerprintAuthenAudioPrompt, NULL, SND_ASYNC);
m_pCTCMFPCtrl->ShowWindow(true);
}
}
else
{
m_pCDoronUruActiveXCtrl = (CDoronUruActiveX*)GetDlgItem(IDC_DORONURUACTIVEXCTRL_FP);
if(m_pCDoronUruActiveXCtrl)
{
m_pCDoronUruActiveXCtrl->Init(0.001, 1000, false);
m_pCDoronUruActiveXCtrl->ShowWindow(true);
}
else
m_sVerificationStatus = "初始化指纹仪失败!";
}

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

BEGIN_EVENTSINK_MAP(CFingerprintAuthenDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CFingerprintAuthenDlg)
ON_EVENT(CFingerprintAuthenDlg, IDC_DORONURUACTIVEXCTRL_FP, 1 /* Notify */, OnNotifyDoronuruactivexctrlFp, VTS_I2 VTS_I2)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CFingerprintAuthenDlg::OnNotifyDoronuruactivexctrlFp(short SensorNo, short NotifyCode)
{
m_pCDoronUruActiveXCtrl->Invalidate();
switch(NotifyCode)
{
case 1:
m_sVerificationStatus = "连接指纹仪成功!";
break;
case -1:
m_sVerificationStatus = "连接指纹仪失败!";
break;
case 3:
m_sVerificationStatus = "指纹核对成功!请按确认考生身份按钮,准备开始考试。";
m_bIsAuthenticated = true;
m_bIsSnapped = true;
break;
case -3:
m_sVerificationStatus = "指纹不匹配!请重试。";
m_pCDoronUruActiveXCtrl->Verify("", false);
m_bIsAuthenticated = false;
m_bIsSnapped = true;
break;
case 6:
m_pCDoronUruActiveXCtrl->Invalidate();
break;
case -10:
m_sVerificationStatus = "无效的指纹仪设备!";
break;
}

UpdateData(FALSE);
m_pCDoronUruActiveXCtrl->Invalidate();
}

void CFingerprintAuthenDlg::OnButtonSnap()
{
if(gFingerprintDevice == 0)
{
if(m_pCTCMFPCtrl)
{
if(m_pCTCMFPCtrl->Snap() != 1)
{
m_bIsSnapped = false;
m_sVerificationStatus = "没有取到指纹!请重试。";
UpdateData(FALSE);
return;
}
m_bIsSnapped = true;

char sEnrollTemplate[FINGERPRINT_LEN] = "\0";
for(int i = 0; i < 2; i++)
{
m_sVerificationStatus = "请考生将手指放到指纹仪上。";

if(i == 0)
{
if(strcmp(m_sFingerprint1, ""))
strncpy(sEnrollTemplate, m_sFingerprint1, FINGERPRINT_LEN);
else
continue;
}

if(i == 1)
{
if(strcmp(m_sFingerprint2, ""))
strncpy(sEnrollTemplate, m_sFingerprint2, FINGERPRINT_LEN);
else
{
if(!strcmp(m_sFingerprint1, ""))
{
AfxMessageBox("数据库中没有该考生的指纹数据!考生身份无法验证。");
return;
}

continue;
}
}

// Set EnrollTemplate.
m_pCTCMFPCtrl->SetEnrollTemplate(sEnrollTemplate);

// Set the verify security to be the lowest 4 : 1/1000.
m_pCTCMFPCtrl->SetVerifySecurity(4);
if(m_pCTCMFPCtrl->Verify() == 1)
{
m_sVerificationStatus = "指纹核对成功!请稍候 ...";
UpdateData(FALSE);
m_bIsAuthenticated = true;

Sleep(3000);
m_pCTCMFPCtrl->Disconnect();
CDialog::OnOK();
return;
}
else
m_bIsAuthenticated = false;
}

if(!m_bIsAuthenticated)
m_sVerificationStatus = "指纹不匹配!";

UpdateData(FALSE);
}
}
else
{
if(m_pCDoronUruActiveXCtrl)
{
m_sVerificationStatus = "请考生将手指放到指纹仪上进行指纹比对。";
//PlaySound(gFingerprintAuthenAudioPrompt, NULL, SND_ASYNC);

if(m_bIsSnapped)
{
m_pCDoronUruActiveXCtrl->Terminate();
m_pCDoronUruActiveXCtrl->Init(0.001, 1000, false);
}

char sFingerprint1[1001] = "\0";
char sFingerprint2[1001] = "\0";
strncpy(sFingerprint1, m_sFingerprint1, 1000);
strncpy(sFingerprint2, m_sFingerprint2, 1000);

m_pCDoronUruActiveXCtrl->Clear();
m_pCDoronUruActiveXCtrl->PutBase64Feature("", "", sFingerprint1);
m_pCDoronUruActiveXCtrl->PutBase64Feature("", "", sFingerprint2);
m_pCDoronUruActiveXCtrl->Verify("", false);
}
}
}

void CFingerprintAuthenDlg::OnCancel()
{
if(m_bIsAuthenticated)
{
int nResponseCode = AfxMessageBox("考生指纹核对已经成功,是否终止考试?", MB_OKCANCEL);
if(nResponseCode == IDCANCEL)
return;
}

if(gFingerprintDevice == 0)
m_pCTCMFPCtrl->Disconnect();
else
m_pCDoronUruActiveXCtrl->Terminate();

CDialog::OnCancel();
}

void CFingerprintAuthenDlg::OnOK()
{
if(!m_bIsAuthenticated)
{
int nResponseCode = AfxMessageBox("考生指纹核对尚未成功,是否继续进行考试?", MB_OKCANCEL);
if(nResponseCode == IDCANCEL)
return;
}

if(gFingerprintDevice == 0)
m_pCTCMFPCtrl->Disconnect();
else
m_pCDoronUruActiveXCtrl->Terminate();

CDialog::OnOK();
}

void CFingerprintAuthenDlg::OnPaint()
{
if(m_sPhotoFileName.Find(".jpg") != -1)
{
CPaintDC dc(this); // device context for painting
CImage imgObj(m_sPhotoFileName);

CPalette *hOldPal = NULL;
if(imgObj.GetPalette())
{
hOldPal = dc.SelectPalette((CPalette*)imgObj.GetPalette(), TRUE);
dc.RealizePalette();
}

//int rc = imgObj.Draw(&dc, 30, 30);
imgObj.Stretch(&dc, 30, 30, 240, 360);

if(hOldPal)
dc.SelectPalette(hOldPal, TRUE);
}

// Do not call CDialog::OnPaint() for painting messages
}
huwen7565833 2010-07-20
  • 打赏
  • 举报
回复
友情帮顶!~!~!~
小黑哥gs 2010-07-19
  • 打赏
  • 举报
回复
个人觉得你得去买一个指纹识别器。。然后客户指纹得预存。。到时候匹配的时候就根据指纹识别器来判断。。
wwfgu00ing 2010-07-19
  • 打赏
  • 举报
回复
用第三厂商的工具及接口即可
wuyq11 2010-07-19
  • 打赏
  • 举报
回复
捷哥1999 2010-07-19
  • 打赏
  • 举报
回复
帮你找到的一个识别程序,希望对你有参考价值:
Fingerprint Identification Program
一个指纹识别的程序


下载前需要注册用户。
bomeixinxin 2010-07-19
  • 打赏
  • 举报
回复
学习......
mayonglong 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lianshaohua 的回复:]
使用第三厂商的工具及接口即可;
[/Quote]

有点深奥~~
somuns8 2010-07-19
  • 打赏
  • 举报
回复
关注,学习
捷哥1999 2010-07-19
  • 打赏
  • 举报
回复
1、厂商要提供硬件的API,然你可以读取到指纹。
2、我估计厂商应该又有API直接实现了对比,否则指纹的设备不就是图像扫描了,何来指纹识别呀?

3、如果你自己研究指纹识别,那么涉及到图像的识别处理了。
aiguo0713 2010-07-19
  • 打赏
  • 举报
回复
厂商会提供接口的
-小蕾- 2010-07-19
  • 打赏
  • 举报
回复
提供指纹仪器的厂商会给你提供接口的,到时候你调用api执行方法就可以进行匹配了。。。
guyehanxinlei 2010-07-19
  • 打赏
  • 举报
回复
这个很强大
加载更多回复(7)

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧