/// <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); }
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); }