private void ReadCard_Thread() { try { while (true) { if (_Started) { _Reading = true; ReadCardResult result = CardRead(); if (!string.IsNullOrEmpty(result.CardID) && _CardReadCallBackStack.Count > 0) { CardReadEventArgs args = new CardReadEventArgs() { CardID = result.CardID, ParkingDate = result.ParkingDate }; _CardReadCallBackStack.Peek().Invoke(this, args); } _Reading = false; } Thread.Sleep(500); } } catch (ThreadAbortException ex) { } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } _Reading = false; }
public ReadCardResult ReadCard() { ReadCardResult result = new ReadCardResult(); long cardID = 0; Card_Info info = new Card_Info(); try { if (ReadCardInfo(ref info) == 1) { if (WegenType == WegenType.Wengen26) { cardID = info.Card_ID[7] + info.Card_ID[6] * 256 + info.Card_ID[5] * 256 * 256; } else if (WegenType == WegenType.Wengen34) { cardID = info.Card_ID[7] + info.Card_ID[6] * 256 + info.Card_ID[5] * 256 * 256 + info.Card_ID[4] * (long)(256 * 256 * 256); } if (cardID > 0) { result.CardID = cardID.ToString(); return(result); } } } catch { } return(result); }
/// <summary> /// 读卡片的ID号及数据 /// </summary> /// <returns></returns> public ReadCardResult ReadCard() { ReadCardResult result = new ReadCardResult(); try { string value = string.Empty; ACTIVEPARAA pAInfo = new ACTIVEPARAA(); if (MUR200Init() > 0) { if (MUR200Open(0) == 0) { if (MFActivate(0, 0x52, ref pAInfo) == 0) { if (!InvalidReading) { InvalidReading = true; value = GetUID(pAInfo.UID, pAInfo.UIDLen); //读取扇区2数据,读取成功将数据返回,失败不作处理 if (MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (2 * 4 + 3), RalidKey) == 0) { byte[] sectiondata = new byte[16 * 3]; if (MFRead((2 * 4 + 0), 3, sectiondata) == 0) { result.ParkingDate = new byte[16 * 3]; Array.Copy(sectiondata, result.ParkingDate, 16 * 3); } } _SucessBuz(); } MFHalt(); } else { InvalidReading = false; } MUR200Exit(); } } if (!string.IsNullOrEmpty(value)) { result.CardID = value.ToString(); } } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } return(result); }
/// <summary> /// 从卡片中读卡扇区某些块中的数据,失败返回空 /// </summary> /// <param name="cardID">卡片的卡号(为null或空时不检查卡号是否一致)</param> /// <param name="section">扇区(0~15)</param> /// <param name="block">起始块号(0~3)</param> /// <param name="count">读取块数(1~3)</param> /// <param name="key">密钥</param> /// <param name="successBuz">成功是否发出提示音</param> /// <param name="failBuz">失败是否发出提示音</param> /// <param name="initKey">密钥验证失败后,是否初始化扇出密钥</param> /// <returns></returns> public ReadCardResult ReadSection(string cardID, int section, int block, byte count, byte[] key, bool successBuz, bool failBuz, bool initKey) { bool originalStarted = _Started; if (originalStarted) { StopReadCard(); //正在读卡,先停止 WaitForReading(); //等待读卡完成 } ReadCardResult result = null; try { if (HadActiveReader) { result = _ActiveReader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey); } else { foreach (ICardReader reader in _Readers) { result = reader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey); if (result != null && !string.IsNullOrEmpty(result.CardID)) { _ActiveReader = reader; break; } } if (result == null) { result = new ReadCardResult(); result.ResultCode = CardOperationResultCode.InitFail; } } } catch (ThreadAbortException ex) { } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } if (originalStarted) { BeginReadCard(); //恢复读卡 } return(result); }
public ReadCardResult ReadCard() { ReadCardResult result = new ReadCardResult(); try { long cardID = RCReadCard(); if (cardID > 0) { result.CardID = cardID.ToString(); return(result); } } catch { } return(result); }
private ReadCardResult CardRead() { ReadCardResult result = new ReadCardResult(); try { foreach (ICardReader reader in _Readers) { result = reader.ReadCard(); if (!string.IsNullOrEmpty(result.CardID)) { _ActiveReader = reader; return(result); } } } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } return(result); }
/// <summary> /// 从卡片中读卡扇区某些块中的数据,失败返回空 /// </summary> /// <param name="cardID">卡片的卡号(为null或空时不检查卡号是否一致)</param> /// <param name="section">扇区(0~15)</param> /// <param name="block">起始块号(0~3)</param> /// <param name="count">读取块数(1~3)</param> /// <param name="key">密钥</param> /// <param name="successBuz">成功是否发出提示音</param> /// <param name="failBuz">失败是否发出提示音</param> /// <param name="initKey">密钥验证失败后,是否初始化扇出密钥</param> /// <returns></returns> public ReadCardResult ReadSection(string cardID, int section, int block, byte count, byte[] key, bool successBuz, bool failBuz, bool initKey) { ReadCardResult result = new ReadCardResult(); try { int ret = 1; byte[] readbytes = null; ACTIVEPARAA pAInfo = new ACTIVEPARAA(); if (MUR200Init() > 0) { ret = MUR200Open(0); } else if (result.ResultCode == CardOperationResultCode.Success) { result.ResultCode = CardOperationResultCode.InitFail; } if (ret == 0) { ret = MFActivate(0, 0x52, ref pAInfo); } else if (result.ResultCode == CardOperationResultCode.Success) { result.ResultCode = CardOperationResultCode.OpenFail; } if (ret == 0) { result.CardID = GetUID(pAInfo.UID, pAInfo.UIDLen); //cardID不为空时,需要检查卡号是否一致,不一致时,返回写卡失败 if (!string.IsNullOrEmpty(cardID) && cardID != result.CardID) { ret = 1; } } else if (result.ResultCode == CardOperationResultCode.Success) { result.ResultCode = CardOperationResultCode.NoCard; } if (ret == 0) { ret = MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (byte)(section * 4 + 3), key); } else if (result.ResultCode == CardOperationResultCode.Success) { result.ResultCode = CardOperationResultCode.CardIDError; } //密钥验证失败后,如果需要初始化密钥 if (initKey && ret != 0 && result.ResultCode == CardOperationResultCode.Success) { MFActivate(0, 0x52, ref pAInfo); result.ResultCode = _InitKey(section, DefaultKey, key); if (result.ResultCode == CardOperationResultCode.Success) { ret = MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (byte)(section * 4 + 3), key);//再次验证密钥 } } if (ret == 0) { readbytes = new byte[16 * count]; ret = MFRead((byte)(section * 4 + block), count, readbytes); if (ret == 0) { result[section] = readbytes; result.ResultCode = CardOperationResultCode.Success; } else { result.ResultCode = CardOperationResultCode.Fail; } } else if (result.ResultCode == CardOperationResultCode.Success) { result.ResultCode = CardOperationResultCode.AuthFail; } if (ret == 0 && successBuz) { _SucessBuz(); } else if (ret != 0 && failBuz) { _FailBuz(); } MUR200Exit(); } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } return(result); }