/// <summary>
        /// 验证两枚指纹模板是否相同
        /// </summary>
        /// <exception cref="ArgumentNullException"/>
        /// <param name="fingerprint"></param>
        /// <param name="left"></param>
        /// <param name="right"></param>
        /// <returns></returns>
        public static bool Verify(this IFingerprint fingerprint, byte[] left, byte[] right)
        {
            var _left  = new FingerprintInfo(FingerprintType.Template, left);
            var _right = new FingerprintInfo(FingerprintType.Template, right);

            return(fingerprint.Verify(_left, _right));
        }
        /// <summary>
        /// 已异步的方式注册指纹
        /// </summary>
        /// <param name="fingerprint"></param>
        /// <param name="action">提示方法</param>
        /// <param name="describes">提示语句</param>
        /// <param name="cancellation"></param>
        /// <returns></returns>
        public static async Task <FingerprintInfo> RegisterAsync(this IFingerprint fingerprint, Action <string, MessageType> action, string[] describes, CancellationToken cancellation)
        {
            if (describes == null)
            {
                throw new ArgumentNullException(nameof(describes));
            }

            string[] _describes = new string[5];
            for (int i = 0; i < _describes.Length; i++)
            {
                if (i < describes.Length)
                {
                    _describes[i] = describes[i];
                }
                else
                {
                    _describes[i] = Describes[i];
                }
            }

            FingerprintInfo[] _fingerprints = new FingerprintInfo[3];
            action(_describes[0], MessageType.info); // 注册指纹需要按下三次手指
            for (int i = 0; i < 3;)
            {
                FingerprintInfo _fingerprint = await fingerprint.GetFingerprintAsync(cancellation);

                if (cancellation.IsCancellationRequested)
                {
                    return(null);
                }
                if (_fingerprint != null)
                {
                    if (i == 0)
                    {
                        _fingerprints[i] = _fingerprint;
                        i++;
                    }
                    else if (i > 0)
                    {
                        if (fingerprint.Verify(_fingerprint, _fingerprints[i - 1]))
                        {
                            _fingerprints[i] = _fingerprint;
                            i++;
                        }
                        else
                        {
                            action(_describes[4], MessageType.Error);// 请使用同一手指
                        }
                    }
                }
                if (i < 3)
                {
                    action(_describes[i], MessageType.info);
                    // 还需要按下{3 - i}次手指
                }
            }
            action(_describes[3], MessageType.Success);// 请使用同一手指
            return(fingerprint.Merge(_fingerprints));
        }
        /// <summary>
        /// 将三枚指纹模板合并成一枚指纹模板
        /// </summary>
        /// <exception cref="ArgumentNullException"/>
        /// <param name="fingerprint"></param>
        /// <param name="templates">指纹模板</param>
        /// <returns></returns>
        public static byte[] Merge(this IFingerprint fingerprint, params byte[][] templates)
        {
            FingerprintInfo[] fingerprints = new FingerprintInfo[3];
            fingerprints[0] = new FingerprintInfo(FingerprintType.Template, templates[0]);
            fingerprints[1] = new FingerprintInfo(FingerprintType.Template, templates[1]);
            fingerprints[2] = new FingerprintInfo(FingerprintType.Template, templates[2]);

            return(fingerprint.Merge(fingerprints).Template);
        }
Esempio n. 4
0
        public async static void UserZkfpTool()
        {
            zkfp.Initialization();
            // 初始化工具类
            do
            {
                if (!zkfp.IsInit)// 初始化指纹仪
                {
                    zkfp.Initialization();
                    Console.WriteLine("请连接指纹仪器后按任意键重试。");
                    Console.ReadKey(false);
                }
                else
                {
                    if (fingerprint == null)
                    {// 未注册
                        FingerprintInfo[] fingerprints = new FingerprintInfo[3];
                        fingerprint = await zkfp.RegisterAsync((tips, type) =>
                        {
                            switch (type)
                            {
                            default:
                            case MessageType.info:
                                Console.ResetColor();
                                zkfp.SetLight(LightType.White);
                                break;

                            case MessageType.Success:
                                Console.ForegroundColor = ConsoleColor.Green;
                                zkfp.SetLight(LightType.Green);
                                break;

                            case MessageType.Error:
                                Console.ForegroundColor = ConsoleColor.Red;
                                zkfp.SetLight(LightType.Red);
                                break;
                            }
                            Console.WriteLine(tips);
                        }, source.Token);

                        if (source.Token.IsCancellationRequested)
                        {
                            break;
                        }
                    }
                    else
                    {
                        // 已注册,调用验证
                        FingerprintInfo _fingerprint = await zkfp.GetFingerprintAsync(source.Token);

                        if (source.Token.IsCancellationRequested)
                        {
                            break;
                        }

                        if (zkfp.Verify(fingerprint, _fingerprint))
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine("验证成功");
                        }
                        else
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("验证失败,请重试");
                        }
                        Console.ResetColor();
                    }
                }
            }while (true);
        }