# 中控指静脉仪C# SDK接口指南

## 1.概述
	欢迎使用中控指静脉仪SDK，在使用前请您先仔细阅读本手册，以便您能更快地掌握并使用中控指静脉仪SDK.

## 2.系统需求
	•操作系统:Windows XP~Windows 10
	•使用开发语言：C# (donet 3.5)

	

## 3.安装说明
	driver目录为设备驱动；Bin\x86为32位动态库文件。

## 4.接口说明
### 4.1 GetSDKVersion
	[函数]
		public static int GetSDKVersion(byte[] version, ref int length);
	[功能]
		获取SDK版本号
	[参数]
		version[out]
			out:实际返回SDK版本
		length[in/out]
			in:预分配数据大小	
			out:实际返回数据大小
	[返回值]
		0成功，其他参考错误说明

### 4.2 Init
	[函数]
		public static int Init() 
	[功能]
		初始化函数
	[参数]
		无
	[返回值]
		0表示成功，其他参考错误说明

### 4.3 Terminate
	[函数]
		public static int Terminate();
	[功能]
		 释放资源
	[参数]
		无
	[返回值]
		0表示成功，其他参考错误说明


### 4.4 GetDeviceCount()
	[函数]
		public static int GetDeviceCount();
	[功能]
		获取设备数
	[参数]
		无
	[返回值]
		0表示成功，其他参考错误说明

### 4.5 OpenDevice
	[函数]
		public static IntPtr OpenDevice(int index);
	[功能]
		打开设备
	[参数]
		index
        	设备索引(1~n-1,n=GetDeviceCount())
	[返回值]
		设备操作指针

### 4.6 CloseDevice
	[函数]
		public static int CloseDevice(IntPtr devHandle);
	[功能]
		从模块获取手指的指纹图像
	[参数]
		devHandle
        	设备操作指针
	[返回值]
		0表示成功，其他参考错误说明

### 4.7 SetParameters
	[函数]
		public static int SetParameters(IntPtr devHandle, int nParamCode, byte[] paramValue, int cbParamValue);
	[功能]
		设置设备参数
	[参数]
		devHandle
        	设备操作指针
	    nParamCode
	        参数编号(见参数表)
	    pramValue
	        参数数据
	    cbParamValue
	        参数数据长度
	[返回值]
		0表示成功，其他参考错误说明

### 4.8 GetParameters
	[函数]
		public static int GetParameters(IntPtr devHandle, int nParamCode, byte[] paramValue, ref int cbParamValue);
	[功能]
		获取设备参数
	[参数]
		devHandle
        	设备操作指针
	    nParamCode
	        参数编号(见参数表)
	    paramValue[out]
	        保存返回参数值
	    cbParamValue[in/out]
	        in:pramValue预分配内存大小(字节数)
	        out:实际返回数据长度
	[返回值]
		0表示成功，其他参考错误说明

### 4.9 CaptureFingerVeinImage
	[函数]
		public static int CaptureFingerVeinImage(IntPtr devHandle, byte[] fpImage, ref int cbFPImage, byte[] fvImage, ref int cbFVImage);
	[功能]
		采集指纹和指静脉图像
	[参数]
		devHandle
        	设备操作指针
	    fpImg[out]
	        返回指纹图像位图数据(预分配内存指纹图像宽*高字节)
		cbFPImage[in/out]
			in:fpImg预分配内存大小(字节数)
			out:实际返回图像数据长度
	    fvImg[out]
	        返回指静脉图像位图数据(预分配内存指纹图像宽*高字节)
		cbFVImage[in/out]
			in:fvImage预分配内存大小(字节数)
			out:实际返回图像数据长度
	[返回值]
		0表示成功，其他参考错误说明

### 4.10 CaptureFingerVeinImageAndTemplate
	[函数]
		public static int CaptureFingerVeinImageAndTemplate(IntPtr devHandle, byte[] fpImage, ref int cbFPImage, byte[] fvImage, ref int cbFVImage, byte[] fpTemplate, ref int cbFPTemplate, byte[] fvTemplate, ref int cbFVTemplate)
	[功能]
		采集指纹和静脉的图像、模板
	[参数]
		devHandle
        	设备操作指针
	    fpImg[out]
	        返回指纹图像位图数据(预分配内存指纹图像宽*高字节)
		cbFPImage[in/out]
			in:fpImg预分配内存大小(字节数)
			out:实际返回图像数据长度
	    fvImg[out]
	        返回指静脉图像位图数据(预分配内存指纹图像宽*高字节)
		cbFVImage[in/out]
			in:fvImage预分配内存大小(字节数)
			out:实际返回图像数据长度
		fpTemplate[out]
	        返回指纹模板
	    cbfpTemplate[in/out]
	        in:fpTemplate预分配内存大小(字节数)
	        out:实际返回指纹模板数据长度
	    fvTemplate[out]
	        返回指静脉模板
	    cbfvTemplate[in/out]
	        in:fvTemplate预分配内存大小(字节数)
	        out:实际返回指静脉模板数据长度		
	[返回值]
		0表示成功，其他参考错误说明

### 4.11 Verify
	[函数]
		public static int Verify(IntPtr devHandle, int type, byte[] regTemplate, int cbRegTemplate, byte[] verTemplate, int cbVerTemplate)
	[功能]
		1：1比对
	[参数]
		devHandle
        	设备操作指针
		type
			0：指纹1：1比对
			1：静脉1：1比对
	    regTemplate
	        登记模板
		cbRegTemplate
			登记模板长度
	    verTemplate
	        比对模板
		cbVerTemplate
			比对模板长度
		[返回值]
			比对分数，<0参考错误说明

### 4.12 MergeFPEx
	[函数]
		public static int MergeFPEx(IntPtr devHandle, byte[] tmp1, byte[] tmp2, byte[] tmp3, int count, byte[] regTmp, ref int cbRegTmp)
	[功能]
		指纹模板的合并
	[参数]
		devHandle
        	设备操作指针
	    tmp1
	        指纹模板1
		tmp2
	        指纹模板2
		tmp3
	        指纹模板3
		count
			指纹模板个数
	    regTemp[out]
	        保存登记模板
	    cbRegTmp[in/out]
	        in:regTemp预分配内存大小(字节数)
	        out:实际返回数据长度

	[返回值]
		0表示成功，其他参考错误说明

### 4.13 DBInit
	[函数]
		public static IntPtr DBInit(IntPtr devHandle)
	[功能]
		初始化算法库
	[参数]
		devHandle
			设备操作指针
	[返回值]
		算法操作指针

### 4.14 DBFree
	[函数]
		public static int DBFree(IntPtr dbHandle)
	[功能]
		 释放算法库
	[参数]
		dbHandle
        	算法操作指针
	[返回值]
		0表示成功，其他参考错误说明

### 4.15 DBCount
	[函数]
		 public static int DBCount(IntPtr dbHandle, int type)
	[功能]
		 获取指纹或静脉登记的模板数
	[参数]
		dbHandle
			算法操作指针
		type
			0：指纹
			1：静脉
	[返回值]
		模板数，<0 参考错误说明

### 4.16 DBAddEx
	[函数]
		public static int DBAddEx(IntPtr dbHandle, int type, byte[] fid, byte[] tmp1, byte[] tmp2, byte[] tmp3, int count)
	[功能]
		添加登记模板到内存
	[参数]
		dbHandle
        	算法操作指针、
		type
			0：指纹
			1：静脉
	    fid
	        手指ID（>0）
	    tmp1
	        模板1
		tmp2
	        模板2
		tmp3
	        模板3
		count
			模板个数
	[返回值]
		0表示成功，其他参考错误说明

### 4.17 DBDel
	[函数]
		public static int DBDel(IntPtr dbHandle, int type, byte[] fid)
	[功能]
		从内存中删除一枚指定的指纹或静脉模板
	[参数]
		dbHandle
        	算法操作指针
		type
			0：指纹
			1：静脉
	    fid
	        手指ID
	[返回值]
		0表示成功，其他参考错误说明

### 4.18 DBClear
	[函数]
		public static int DBClear(IntPtr dbHandle, int type)
	[功能]
		从内存中清除所有登记指纹模板或静脉模板
	[参数]
		dbHandle
        	算法操作指针
		type
			0：指纹
			1：静脉
	[返回值]
		0表示成功，其他参考错误说明

### 4.19 DBIdentify
	[函数]
		public static int DBIdentify(IntPtr dbHandle, int type, byte[] verTemplate, int cbVerTemplate, byte[] id, ref int score)
	[功能]
		1：N比对
	[参数]
		dbHandle
        	算法操作指针
		type
			0：指纹
			1：静脉
	    verTemplate
	        模板
		cbVerTemplate
			模板长度
	    id[out]
	        返回手指ID
	    score[out]
	        返回分数
	[返回值]
		0表示成功，其他参考错误说明

### 4.20 DBHybridIdentify
	[函数]
		public static int DBHybridIdentify(IntPtr dbHandle, int mode, byte[] verFPTemplate, int cbVerFPTemplate, byte[] verFVTemplate, int cbVerFVTemplate, byte[] id, ref int score)
	[功能]
		比对
	[参数]
		dbHandle
        	算法操作指针
		mode
			0：普通比对(指纹或静脉，其一通过就比对通过)
			1：防假比对(静脉作为防假，其一通过就比对通过)
			2：安全比对(指纹跟静脉必须都通过，才能比对通过)
	    verTemplate
	        模板
		cbVerTemplate
			模板长度
	    id[out]
	        返回手指ID
	    score[out]
	        返回分数
	[返回值]
		0表示成功，其他参考错误说明

### 4.21 SetThreshold
	[函数]
		public static int SetThreshold(IntPtr hDBCache, int code, int value)
	[功能]
		设置比对阈值
	[参数]
		dbHandle
        	算法操作指针
		code
			0：指纹
			1：静脉
		value
			比对的阈值
	[返回值]
		0表示成功，其他参考错误说明

### 4.22 GetThreshold
	[函数]
		public static int GetThreshold(IntPtr hDBCache, int code, ref int value)
	[功能]
		获取比对阈值
	[参数]
		dbHandle
        	算法操作指针
		code
			0：指纹
			1：静脉
		value[in/out]
			in:预分配的比对阈值
			out:返回的比对阈值
	[返回值]
		0表示成功，其他参考错误说明

### 4.23 ByteArray2Int
	[函数]
		public bool ByteArray2Int(byte[] buf, ref int value)
	[功能]
		byte[]转int类型
	[参数]
		buf
			需要转换的byte[]数据
		value
			转换后的数据
	[返回值]
		true成功，false失败

### 4.24 Int2ByteArray
	[函数]
		public bool Int2ByteArray(int value, byte[] buf)
	[功能]
		byte[]转int类型
	[参数]
		value
			需要转换的int
		buf
			准换后的byte[]数据
	[返回值]
		true成功，false失败



## 5.附录

### 5.1参数码
	1.  指静脉图像宽
    参数代码：1
    数据长度：4Bytes(Int)
	2.  指静脉图像高
    参数代码：2
    数据长度：4Bytes(Int)

### 5.2 错误码
	0   操作成功
	1   已经初始化
	-1  初始化算法库失败
	-2  初始化采集库失败
	-3  未连接设备
	-4  接口暂不支持
	-5  无效参数
	-6  打开设备失败
	-7  无效句柄
	-8  取像失败
	-9  提取指纹模板失败
	-10 终端操作
	-11 内存不足
	-12 当前正在采集(设备繁忙)
	-13 添加指纹模板到内存失败
	-14 删除指纹模板失败
	-15 添加指静脉模板失败
	-16 删除指静脉模板失败
	-17 操作失败(其他错误)
	-18 取消采集
	-19 提取指静脉模板失败
	-20 比对指纹失败(登记过程中按不同的手指，或者按压不合理导致差异太大)
	-21 比对指静脉失败(登记过程中按不同的手指，或者按压不合理导致差异太大)
	-22 合并登记指纹模板失败
	-23	重复指纹ID
	-24	指纹模板异常
	-25	静脉模板异常


### 5.3 流程图
#### 5.3.1 整体流程图
![image](zkfv.png)

#### 5.3.2 登记流程图
![image](zkfv_Register.png)

#### 5.3.3 比对流程图
![image](zkfv_Identify.png)
