Ler dados do Cartão de Cidadão - Visual Basic .NET - Portugal-a-Programar
By Futre, January 21, 2016 in Visual Basic .NET
Sei que já existem alguns tópicos com este assunto mas estou um pouco (muito) confuso.
Estou a desenvolver uma aplicação que terá de ter acesso à Autenticação do Cartão de Cidadão.
Já tenho o middleware instalado.
Inicialmente estava a tentar usar a eidpt.dll, mas dava-me erro de dependências.
Usando a pteidlib_dotnet.dll está a dar o erro "PTEID Error Code : 9" a fazer eidpt.Pteid.GetID().
estou com o mesmo problema por aqui... alguém?
Cerzedelo 31
Já tentou ver na página https://svn.gov.pt/projects/ccidadao
Edited April 8, 2016 by Cerzedelo
Já procurei nesses sites mas a informação que existe é datada. Vou expor o meu problema com código para que talvez seja mais fácil perceber a quem vê de fora.
Framework: .NET 4
Build: 32bits
Classe de leitura do cartão (criei apenas para prova de conceito)
class CCReader
public void GetInfoFromCard()
var citizen = new Citizen();
EIDPT.Init("");
var id = EIDPT.GetID();
var picture = EIDPT.GetPicture();
var ms = new MemoryStream(picture.Bytes, 0, picture.BytesLength, false);
//var image = CSJ2K.J2kImage.FromStream(ms);
//image.Save(@"fotos\" + id.NIF + ".jpeg");
citizen.FirstName = id.FirstName;
citizen.LastName = id.Name;
citizen.FirstNameFather = id.FirstNameFather;
citizen.LastNameFather = id.NameFather;
citizen.FirstNameMother = id.FirstNameMother;
citizen.LastNameMother = id.NameMother;
//citizen.Name = Classes.Methods.UppercaseFirstLetter(id.FirstName) + " " + Classes.Methods.UppercaseFirstLetter(id.Name);
citizen.Sex = id.Sex;
citizen.Birthday = id.BirthDate;
citizen.ID = id.BI;
citizen.FatherName = id.FirstNameFather + " " + id.NameFather;
citizen.MotherName = id.FirstNameMother + " " + id.NameMother;
citizen.TaxNumber = id.NIF;
citizen.SocialSecurity = id.NSS;
//citizen.Photo = image;
var address = EIDPT.GetAddress();
citizen.District = address.DistrictDescription;
citizen.Municipality = address.MunicipalityDescription;
citizen.CivilParish = address.FreguesiaDescription;
citizen.Address = address.StreetType + " " + address.Street + " Nº " + address.Door;
citizen.Locality = address.Locality;
citizen.Zip = address.CP4 + "-" + address.CP3 + " " + address.Postal;
EIDPT.Exit(ExitMode.LEAVE_CARD);
Console.WriteLine("Error reading data: " + ex.Message);
public string FirstNameFather { get; set; }
public string LastNameFather { get; set; }
public string FirstNameMother { get; set; }
public string LastNameMother { get; set; }
public string CivilParish { get; set; }
AS dependências que adicionei ao projecto são:
eidpt.dll (fonte)
pteidlib_dotnet.dll (fonte)
O programa compila, mas ao arrancar obtenho este erro:
Não foi possível carregar o ficheiro ou assemblagem 'eidpt.dll' ou uma das respectivas dependências. Impossível localizar o módulo especificado.
Por sugestão de alguns comentários (inclusive neste forum) fiz download da ferramenta depends.exe e analisei o ficheiro eidpt.dll. O resultado foi uma serie de libs em falta para a lib referenciada pteidlib_dotnet.dll:
Alguém tem ideia de como meter o meu programa básico a correr? É preciso mais alguma lib específica?
Edited April 8, 2016 by rmpt
Ninguém responde nem reage, mas vou deixar a minha solução para o problema, já que afinal de contas é muito simples e poderá ser util para alguém no futuro...
Tecnologia: C#
Versão .NET: 4
Còdigo fonte: aqui
Fontes: kitcc, svn.gov.pt, cartaodecidadao.pt
Para o desenvolvimento da minha aplicação estava a usar a DLL de instalação do middleware: pteidlib_dotnet.dll
Acontece que existem 2 instalações da mesma coisa, em sites diferentes... A que usei em primeiro lugar foi do svn.gov.pt. A aplicação instalada funciona bem, mas ao usar a dll em causa dá erro pois está desactualizada! Desinstalei o que tinha feito download de svn.gov.pt e instalei o middleware que se encontra em cartaodecidadao.pt e funcionou à primeira.
Ou seja, façam download de cartaodecidadao.pt e usem a dll pteidlib_dotnet.dll que é instalada em C:\Windows\System32.
Agora um desabafo: acho vergonhoso que não exista o raio de uma página onde estejam os conteúdos e passos necessários. A informação está em 3 páginas diferentes, com links mortos, documentos antigos e software desactualizado. Acho que não custava muito criar uma página única que fosse actualizada com passos simples tipo:
Faça download da dll X
Faça download do projecto de exemplo Y
Referencie a dll no seu projecto
Uma pessoa tem de andar à cabeçada e inventar soluções no meio de informação datada e dispersa e tem de deduzir conclusões para uma coisa que é modernização do país.
#Fim de desabafo
Espero que isto ajude alguém no futuro
Edited April 12, 2016 by rmpt
csmnf 0
Olá, eu continuo com o problema...
SO é windows 8.1 Pro a 64 bit
.net framework 4.0 (tenho até à 4.6.1 instalado mas na aplicação estou a usar a 4)
Fonte aqui (código de vb.net) adaptada mas é basicamente o mesmo, retirei os controlos aos cartões e adicionei umas funções directas que abrem a ligação ao leitor trazem o nome/nif/... e fecham a ligação - algo muito simples.
Se adicionar um módulo à classe e as chamar dentro da mesma aplicação tudo corre bem. mas se gravar a classe como DLL e a referenciar noutra aplicação tenho um problema:
An unhandled exception of type 'System.IO.FileLoadException' occurred in testedll.exe
Additional information: Não foi possível carregar o ficheiro ou assemblagem 'pteidlib_dotnet, Version=1.0.5946.33561, Culture=neutral, PublicKeyToken=null' ou uma das respectivas dependências. É necessário uma assemblagem com nome seguro. (Excepção de HRESULT: 0x80131044)
A minha dll está a funcionar porque o retorno é a string de excepção que tenho no código mas ao tentar usar a função scCinit() (que usa a pteidlib_dotnet) tenho logo problemas
Alguém sabe como resolver isto? sou eu que estou a tentar inventar a roda?
Já passou algum tempo, mas deixo um projecto C# exemplo para ler todos os dados do cartão de cidadão.
https://ruimptech.wordpress.com/2017/04/23/ler-dados-ed-cartao-de-cidadao-c/
Edited April 23, 2017 by rmpt
mamf 0
Estou a tentar desenvolver uma aplicação em C# para realizar a leitura dos dados do Cartão de Cidadão e surgiu o seguinte erro:
"Não é possível localizar um ponto de entrada com o nome 'CSharp_PTEID_ReaderSet_initSDK__SWIG_1' na DLL 'pteidlibCS_Wrapper' ??