Jump to content
Futre

Ler dados do Cartão de Cidadão

Recommended Posts

Futre

Boa tarde.

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().

Alguém me pode dar uma ajuda?

Obrigado.

Share this post


Link to post
Share on other sites
rmpt

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.

Linguagem: C#

Framework: .NET 4

Sistema Operativo: Windows 10 x64

Build: 32bits

Classe de leitura do cartão (criei apenas para prova de conceito)


class CCReader
{
public void GetInfoFromCard()
{
var citizen = new Citizen();

try
{

EIDPT.Init("");
EIDPT.SetSODChecking(false);

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");
ms.Close();

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;

// address
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);
}
catch (Exception ex)
{
Console.WriteLine("Error reading data: " + ex.Message);
}
}
}

class Citizen
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FirstNameFather { get; set; }
public string LastNameFather { get; set; }
public string FirstNameMother { get; set; }
public string LastNameMother { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public string Birthday { get; set; }
public string ID { get; set; }
public string FatherName { get; set; }
public string MotherName { get; set; }
public string TaxNumber { get; set; }
public string SocialSecurity { get; set; }
public string Photo { get; set; }

// address
public string District { get; set; }
public string Municipality { get; set; }
public string CivilParish { get; set; }
public string Address { get; set; }
public string Locality { get; set; }
public string Zip { 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:

MSVCR120.DLL

KERNEL32.DLL

MSVCP120.DLL

MSCOREE.DLL

Alguém tem ideia de como meter o meu programa básico a correr? É preciso mais alguma lib específica?

Edited by rmpt

Share this post


Link to post
Share on other sites
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#

SO: Windows 10

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:

  1. Faça download da dll X
  2. Faça download do projecto de exemplo Y
  3. Referencie a dll no seu projecto
  4. Corra

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 by rmpt

Share this post


Link to post
Share on other sites
csmnf

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?

Muito obrigada

Carla Faria

Share this post


Link to post
Share on other sites
mamf

Muito bom dia a todos,

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’ ??

Linguagem: C# - Visual Studio 2019.

Sistema Operativo: Windows 10 x64.

Alguém me pode ajudar? Obrigado!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.