ZKFV_C#

# 中控指静脉仪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 整体流程图

#### 5.3.2 登记流程图

#### 5.3.3 比对流程图