public List <string> GetCardReaders() { // Вывод списка кард-ридеров, установленных в системе var manager = new PCSCReadersManager(); manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); var cards = manager.OfType <ISCard>().ToList(); var activeDevsName = new List <string>(); foreach (var card in cards) { PolicySmartcardBase testConnect = null; try { testConnect = new PolicySmartcardBase(card); } catch (Exception) { testConnect = null; } finally { if (testConnect != null) { activeDevsName.Add(testConnect.BaseCard.ReaderName); } } } manager.ReleaseContext(); return(activeDevsName); }
public List <string> GetRuTokens() { // Вывод списка токенов, установленных в системе var manager = new PCSCReadersManager(); manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); var tokens = manager.OfType <ISCard>().Where(device => device.ReaderName.ToLower().Contains("tok")).ToList(); var activeDevsName = new List <string>(); foreach (var token in tokens) { PolicySmartcardBase testConnect = null; try { testConnect = new PolicySmartcardBase(token); testConnect.Connect(); } catch { testConnect = null; } finally { if (testConnect != null) { activeDevsName.Add(testConnect.BaseCard.ReaderName); testConnect.Disconnect(); } } } manager.ReleaseContext(); return(activeDevsName); }
/// <summary> /// Информация об СМО /// </summary> public SmoModel ReadSMOInformation(PolicySmartcardBase policy) { SmoModel result = new SmoModel(); SMOInformation currentSmoInformation = policy.GetCurrentSMOInformation(); if (currentSmoInformation == null) { return(result); } result.SmoOgrn = currentSmoInformation.OGRN; result.SmoOkato = currentSmoInformation.OKATO; result.SmoBegin = this.FormatPolicyDate(new DateTime?(currentSmoInformation.InsuranceStartDate), "Отсутствует"); result.SmoEnd = this.FormatPolicyDate(currentSmoInformation.InsuranceExpireDate, "Не ограничено"); if (!_tersmoService.LoadDictionary().Any()) { return(result); } var tersmo = _tersmoService.LoadDictionary(). FirstOrDefault(x => x.Q_OGRN.ToString() == currentSmoInformation.OGRN && x.TF_OKATO.ToString() == currentSmoInformation.OKATO); if (tersmo != null) { result.SmoRegion = tersmo.Q_NAME; result.SmoName = tersmo.Q_FNAME; } else { result.SmoRegion = "Не найден"; result.SmoName = "Не найден"; } return(result); }
public CardInfoStrings GetCardInfo() { var manager = new PCSCReadersManager(); // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о карте полиса ОМС ( Идентификационные данные ) var cid = policy.GetCardID(); // Чтение информации о карте полиса ОМС ( Информация о микросхеме от производителя ) var ccd = policy.GetICCD(); CardInfoStrings cardInfo = null; if (cid != null) { cardInfo = new CardInfoStrings { CardHexNum = cid.SerialNumber.ToHexString(), CardType = cid.CardType, Vers = cid.CardVersion, InstitId = cid.InstitutionID.ToHexString(), AddInfo = cid.AdditionalInfo.ToHexString() }; } if (ccd != null) { cardInfo = cardInfo ?? new CardInfoStrings(); cardInfo.IssuerCode = ccd.IssuerCode; cardInfo.IssuerData = ccd.IssuerData.ToHexString(); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(cardInfo); } manager.ReleaseContext(); return(null); }
/// <summary> /// Чтение информации с карты /// </summary> public InfoModel ReadInformation(PolicySmartcardBase policy) { var result = new InfoModel { Owner = ReadOwnerInformation(policy), Smo = ReadSMOInformation(policy) }; return(result); }
/// <summary> /// Инициализация карты /// </summary> public bool InitializeCard(PCSCReadersManager cardManager, PolicySmartcardBase policy) { bool flag; try { ISCard card = cardManager[cardManager.OfType <ISCard>().ToList().First().ReaderName]; policy = new PolicySmartcardBase(card); policy.Connect(); flag = true; } catch (Exception ex) { flag = false; throw ex; } return(flag); }
/// <summary> /// Информация о владельце карты /// </summary> public OwnerModel ReadOwnerInformation(PolicySmartcardBase policy) { OwnerModel result = new OwnerModel(); OwnerInformation ownerInformation = policy.GetOwnerInformation(); if (ownerInformation == null) { return(result); } result.OwnerFamily = this.FormatPolicyText(ownerInformation.Identity_1, "Отсутствует"); result.OwnerName = this.FormatPolicyText(ownerInformation.Identity_2, "Отсутствует"); result.OwnerSname = this.FormatPolicyText(ownerInformation.Identity_3, "Отсутствует"); byte? sex = ownerInformation.Sex; string str; if ((sex.GetValueOrDefault() != (byte)1 ? 0 : (sex.HasValue ? 1 : 0)) == 0) { sex = ownerInformation.Sex; str = (sex.GetValueOrDefault() != (byte)2 ? 0 : (sex.HasValue ? 1 : 0)) != 0 ? "Женский" : "Неизвестно"; } else { str = "Мужской"; } result.OwnerSex = str; result.OwnerBdate = this.FormatPolicyDate(ownerInformation.BirthDate, "Отсутствует"); result.OwnerBplace = this.FormatPolicyText(ownerInformation.BirthPlace, "Отсутствует"); result.PoliceNumber = ownerInformation.PolicyNumber; result.PoliceDate = this.FormatPolicyDate(ownerInformation.ExpireDate, "Отсутствует"); result.PoliceLong = this.FormatPolicyDate(ownerInformation.ExpireDate, "Не ограничено"); result.PoliceSnils = this.FormatPolicyText(ownerInformation.SNILS, "Отсутствует"); if (ownerInformation.Citizenship != null) { result.Gcode = this.FormatPolicyText(ownerInformation.Citizenship.CoutryCode, "Отсутствует"); result.Gtext = this.FormatPolicyText(ownerInformation.Citizenship.CoutryCyrillicName, "Отсутствует"); } return(result); }
private Task ReadInfo() { while (true) { System.Threading.Thread.Sleep(1000); PCSCReadersManager CardManager = new PCSCReadersManager(); PolicySmartcardBase policy = null; try { if (!_policyService.InitializeReader(ref CardManager)) { continue; } else if (!_policyService.InitializeCard(ref CardManager, ref policy)) { continue; } else { StatusLabel = CardManager.OfType <ISCard>().ToList().First().ReaderName; if (!_isCardInserted) { Information = _policyService.ReadInformation(ref policy); _isCardInserted = true; } policy.Disconnect(); } } catch (Exception ex) { Information = _emptyInfoModel; StatusLabel = ex.Message.ToString(); _isCardInserted = false; } } }
public OwnerInfo GetOwnerInfo() { // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); try { // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о владельце полиса ОМС var ownerInfoCard = policy.GetOwnerInformation(); if (ownerInfoCard != null) { var ownerInfo = new OwnerInfo { LastName = FormatPolicyText(ownerInfoCard.Identity_1, string.Empty), FirstName = FormatPolicyText(ownerInfoCard.Identity_2, string.Empty), MiddleName = FormatPolicyText(ownerInfoCard.Identity_3, string.Empty), Sex = ownerInfoCard.Sex == 1 ? "273" : ownerInfoCard.Sex == 2 ? "274" : string.Empty, Birthday = FormatPolicyDate(ownerInfoCard.BirthDate, string.Empty), BirthPlace = FormatPolicyText(ownerInfoCard.BirthPlace, string.Empty) }; if (ownerInfoCard.Citizenship != null) { ownerInfo.CitizenschipCode = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCode, string.Empty); ownerInfo.CitizenschipName = FormatPolicyText(ownerInfoCard.Citizenship.CoutryCyrillicName, string.Empty); } ownerInfo.PolisNumber = ownerInfoCard.PolicyNumber; ownerInfo.PolisDateFrom = FormatPolicyDate(ownerInfoCard.IssueDate, string.Empty); ownerInfo.PolisDateTo = FormatPolicyDate(ownerInfoCard.ExpireDate, string.Empty); ownerInfo.Snils = FormatPolicyText(ownerInfoCard.SNILS, string.Empty); try { // Чтение атрибутов безопасности карты полиса ОМС var sod = policy.GetSecurityInformation(); ownerInfo.StateEcp = ownerInfoCard.VerifyEDS(sod) ? "Верна" : "Неверна"; } catch { } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(ownerInfo); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(null); } manager.ReleaseContext(); return(null); } catch { manager.ReleaseContext(); throw; } }
public SmoInfoStrings GetCurrentSmo() { // Чтение информации о владельце карты полиса ОМС var manager = new PCSCReadersManager(); // Установление соединения с смарт-карт API manager.EstablishContext(READERSCONTEXTSCOPE.SCOPE_USER); // Вывод списка ридеров в консоль if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ActiveCardReader)) { // Получение объекта ридера var card = manager[ActiveCardReader]; // Создание объекта для работы с картой полиса ОМС var policy = new PolicySmartcardBase(card); // Подключение к карте полиса ОМС policy.Connect(); // Чтение информации о владельце полиса ОМС var smo = policy.GetCurrentSMOInformation(); if (smo != null) { var smoInfo = new SmoInfoStrings { OgrnSmo = smo.OGRN, Okato = smo.OKATO, InsuranceStartDate = FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"), InsuranceEndDate = FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено") }; if (smo.EDS != null) { smoInfo.Eds = new Eds { Certificate = new X509Certificate2(smo.EDS.Certificate).Subject, Ecp = smo.EDS.Signature.ToHexString() }; try { smoInfo.Eds.StateEcp = smo.VerifyEDS() ? "Верна" : "Неверна"; } catch { } } policy.Disconnect(); manager.ReleaseContext(); return(smoInfo); } // Отключение от карты полиса ОМС policy.Disconnect(); // Отключение от смарт-карт API manager.ReleaseContext(); return(null); } manager.ReleaseContext(); return(null); }
void GetCardData() { if (ReadersComboBox.Items.Count == 0) { MessageBox.Show("Не обнаружено подключенных ридеров!"); return; } ClearForm(); PCSCReadersManager manager = new PCSCReadersManager(); var SA = ReadersComboBox.Items[0].ToString(); manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER); if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(SA)) { ISCard card = manager[SA]; PolicySmartcardBase policy = new PolicySmartcardBase(card); policy.Connect(); try { OwnerInformation owner_info = policy.GetOwnerInformation(); if (owner_info != null) { textBoxFIO.Text = FormatPolicyText(owner_info.Identity_1, "") + " " + FormatPolicyText(owner_info.Identity_2, "") + " " + FormatPolicyText(owner_info.Identity_1, ""); textBoxSex.Text = owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно"; textBoxDateOfBirth.Text = FormatPolicyDate(owner_info.BirthDate, "Отсутствует"); textBoxPlaceOfBirth.Text = FormatPolicyText(owner_info.BirthPlace, "Отсутствует"); if (owner_info.Citizenship != null) { textBoxCountryCode.Text = FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует"); textBoxCountryName.Text = FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует"); } textBoxPolisNumber.Text = owner_info.PolicyNumber; textBoxPolisDate.Text = FormatPolicyDate(owner_info.ExpireDate, "Отсутствует"); textBoxPolisExpire.Text = FormatPolicyDate(owner_info.ExpireDate, "Не ограничено"); textBoxSNILS.Text = FormatPolicyText(owner_info.SNILS, "Отсутствует"); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { CardID cid = policy.GetCardID(); if (cid != null) { textBoxCardSerial.Text = cid.SerialNumber.ToHexString(); textBoxCardType.Text = cid.CardType.ToString(); textBoxCardVersion.Text = cid.CardVersion.ToString(); textBoxCompanyID.Text = cid.InstitutionID.ToHexString(); textBoxInformation.Text = cid.AdditionalInfo.ToHexString(); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { ICCID ccd = policy.GetICCD(); if (ccd != null) { textBoxManufacturerCode.Text = ccd.IssuerCode.ToString(); textBoxManufacturerData.Text = ccd.IssuerData.ToHexString(); } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } try { SMOInformation smo = policy.GetCurrentSMOInformation(); if (smo != null) { textBoxOGRN.Text = smo.OGRN; textBoxOKATO.Text = smo.OKATO; textBoxInsuranceStartDate.Text = FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует"); textBoxExpire.Text = FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено"); textBoxCert.Text = new X509Certificate2(smo.EDS.Certificate).Subject; textBoxECP.Text = smo.EDS.Signature.ToHexString(); //textBoxECPStatus.Text = smo.VerifyEDS() == true ? "Верна" : "Неверна"; } } catch (Exception exception) { MessageBox.Show(exception.Message, "Ошибка: "); } policy.Disconnect(); } manager.ReleaseContext(); }
public static void GetData(string args = "") { PCSCReadersManager manager = new PCSCReadersManager(); try { manager.EstablishContext(SmartCard.PCSC.READERSCONTEXTSCOPE.SCOPE_USER); if (args != "") { ReaderName = args; } else { var list = manager.OfType <ISCard>().ToList(); if (list.Count > 0) { ReaderName = list[0].ReaderName; } else { ContentFile += "Не найдены ридеры!"; } } if (manager.OfType <ISCard>().Select(s => s.ReaderName).ToList().Contains(ReaderName)) { //Получение объекта ридера ISCard card = manager[ReaderName]; //Создание объекта для работы с картой полиса ОМС PolicySmartcardBase policy = new PolicySmartcardBase(card); //Подключение к карте полиса ОМС policy.Connect(); //Чтение информации о владельце полиса ОМС OwnerInformation owner_info = policy.GetOwnerInformation(); if (owner_info != null) { printf("Информация о владельце:"); printf("{0} = {1}", "Фамилия".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_1, "Отсутствует")); printf("{0} = {1}", "Имя".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_2, "Отсутствует")); printf("{0} = {1}", "Отчество".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Identity_3, "Отсутствует")); printf("{0} = {1}", "Пол".PadRight(35, ' '), owner_info.Sex == 1 ? "Мужской" : owner_info.Sex == 2 ? "Женский" : "Неизвестно"); printf("{0} = {1}", "Дата рождения".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.BirthDate, "Отсутствует")); printf("{0} = {1}", "Место рождения".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.BirthPlace, "Отсутствует")); if (owner_info.Citizenship != null) { printf("Гражданство:"); printf("{0} = {1}", "Код страны".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCode, "Отсутствует")); printf("{0} = {1}", "Кириллическое название".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.Citizenship.CoutryCyrillicName, "Отсутствует")); } else { printf("{0} = {1}", "Гражданство".PadRight(35, ' '), "Отсутствует"); } printf("Информация о полисе:"); printf("{0} = {1:D16}", "Номер полиса".PadRight(35, ' '), owner_info.PolicyNumber); printf("{0} = {1}", "Дата выпуска".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Отсутствует")); printf("{0} = {1}", "Срок действия".PadRight(35, ' '), MainForm.FormatPolicyDate(owner_info.ExpireDate, "Не ограничено")); printf("{0} = {1}", "СНИЛС".PadRight(35, ' '), MainForm.FormatPolicyText(owner_info.SNILS, "Отсутствует")); //printf("Чтение атрибутов безопасности карты полиса ОМС"); //SecurityInformation SOD = policy.GetSecurityInformation(); //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), owner_info.VerifyEDS(SOD) ? "Верна" : "Неверна"); } else { printf("Данные о владельце отсутствуют на карте!"); } SMOInformation smo = policy.GetCurrentSMOInformation(); if (smo != null) { printf("Данные страхового приложения:"); printf("{0} = {1}", "ОГРН".PadRight(35, ' '), smo.OGRN); printf("{0} = {1}", "ОКАТО".PadRight(35, ' '), smo.OKATO); printf("{0} = {1}", "Дата начала страхования".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceStartDate, "Отсутствует")); printf("{0} = {1}", "Окончание срока действия".PadRight(35, ' '), MainForm.FormatPolicyDate(smo.InsuranceExpireDate, "Не ограничено")); if (smo.EDS != null) { printf("Данные ЭЦП"); printf("{0} = {1}", "Сертификат".PadRight(35, ' '), new X509Certificate2(smo.EDS.Certificate).Subject); printf("{0} = {1}", "ЭЦП".PadRight(35, ' '), smo.EDS.Signature.ToHexString()); //printf("{0} = {1}", "Статус ЭЦП".PadRight(35, ' '), smo.VerifyEDS() == true ? "Верна" : "Неверна"); } else { printf("{0} = {1}", "Данные ЭЦП".PadRight(35, ' '), "Отсутствуют"); } } else { printf("Данные о смо отсутствуют на карте!"); } CardID cid = policy.GetCardID(); ICCID ccd = policy.GetICCD(); if (cid != null) { printf("Идентификационные данные карты:"); printf("{0} = {1}", "Серийный номер карты".PadRight(35, ' '), cid.SerialNumber.ToHexString()); printf("{0} = {1}", "Тип карты".PadRight(35, ' '), cid.CardType); printf("{0} = {1}", "Версия".PadRight(35, ' '), cid.CardVersion); printf("{0} = {1}", "Идентификатор учреждения".PadRight(35, ' '), cid.InstitutionID.ToHexString()); printf("{0} = {1}", "Дополнительные сведения о карте".PadRight(35, ' '), cid.AdditionalInfo.ToHexString()); } else { printf("Идентификационные данные отсутствуют на карте!"); } if (ccd != null) { printf("Информация о микросхеме от производителя:"); printf("{0} = {1}", "Код производителя карты".PadRight(35, ' '), ccd.IssuerCode); printf("{0} = {1}", "Данные производителя карты".PadRight(35, ' '), ccd.IssuerData.ToHexString()); } else { printf("Информация о микросхеме от производителя отсутствует на карте!"); } //Отключение от карты полиса ОМС policy.Disconnect(); //Отключение от смарт-карт API manager.ReleaseContext(); } else { printf("Устройство чтения смарт-карт с именем [{0}] не найдено в системе."); manager.ReleaseContext(); } } catch (Exception exception) { ContentFile += "Ошибка получения списка ридеров: " + exception.Message; } StreamWriter wf; wf = new StreamWriter("infofile.txt", false, Encoding.GetEncoding(1251)); wf.Write(ContentFile); wf.Close(); }