Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll

[es] :: Pascal / Delphi / Kylix :: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll

Strane: 1 2

[ Pregleda: 10562 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 07:50 - pre 130 meseci
Citat:
tkaranovic: Nemam čitač da probam a ovo uz poruku je kompajlirano sa D2010. Kod je ovaj koji poslat ovde.
Šta ispiše?
Ispiše "Access violation at address 00000000. Read of address 00000000".
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 07:54 - pre 130 meseci
Citat:
savkic: > EidStartup(1);
> EidCleanup

Ti pozivaš svaki put, oni se moraju pozvati samo jednom, najbolje na početku rada programa i na kraju. Takođe pre poziva funkcije resetuj record npr:
FillChar(PodaciOLK, SizeOf(PodaciOLK), 0);

Što se tiče pozivanja EidStartup i Cleanup si u pravu, kod koji sam napisao je samo radi probe, u realnom projektu svakako treba da se poziva samo jednom.
Citat:
savkic: > Mislim da je problem u onom CELIK-API-ju,
BTW, postoji novija verzija dlla, svakako probaj sa njom.

Koliko vidim poslednja verzija dll-a je 1.0.1.0, bar je ta okačena na sajtu MUP-a.

Citat:
savkic: > tamo su uglavnom svi elementi recorda tipa Char,

Kakve to ima veze?

> samim tim ni dobijeni stringovi nisu ispravni, pa naknadna konverzija sa Utf8Decode nema smisla.

Pošto koristim D2006 koji ne radi sa unicode-om, a na LK su podaci upisani ćirilicom, pitanje je šta se zapravo upisuje u non-unicode Char recorde (npr. NepromenljiviPodaci.surname)?
Inače u okačenom primeru se vidi da iščitavanje podataka o LK i promenljivih podataka nije problem, pošto su upisani latinicom, a greška je samo kod nepromenljivih podataka o licu koji su upisani ćirilicom.

Na kraju evo i primera sa sačuvanim ispisom podataka o LK u text fajlu.
Prikačeni fajlovi
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 297
*.adsl-a-1.sezampro.yu.



+16 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 08:10 - pre 130 meseci
Citat:
dogriz
Ispiše "Access violation at address 00000000. Read of address 00000000".


To ispiše kada CelikAPIProject nije u istom diru sa celikapi.dll.
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 09:42 - pre 130 meseci
Citat:
tkaranovic: To ispiše kada CelikAPIProject nije u istom diru sa celikapi.dll.

My bad. Evo ispisa sa dll fajlom u istom diru.
Prikačeni fajlovi
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 297
*.adsl-a-7.sezampro.rs.



+16 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 10:28 - pre 130 meseci
Pogrešne su dužine te koje su ispisane:
NepromenljiviPodaci.personalNumberSize: dužine 0
NepromenljiviPodaci.surnameSize: dužine 0
NepromenljiviPodaci.givenNameSize: prevelike dužine, zbog čega je i ta greška.

Inače je do te greške u dužinama došlo kod onog automatskog prevoda:
Code:

  tagEID_FIXED_PERSONAL_DATA = record
    personalNumber: array[0..EID_MAX_PersonalNumber - 1] of Integer;

treba:
Code:

  tagEID_FIXED_PERSONAL_DATA = record
    personalNumber: array[0..EID_MAX_PersonalNumber - 1] of Char;

ili za d2010:
Code:

  tagEID_FIXED_PERSONAL_DATA = record
    personalNumber: array[0..EID_MAX_PersonalNumber - 1] of AnsiChar;

Nisi probao šta kod tebe ispiše, a mogao bi da probaš sa ovom izmenom gore:
Code:

  Memo1.Lines.Add('personalNumberSize: ' + IntToStr
     (NepromenljiviPodaci.personalNumberSize));
  Memo1.Lines.Add('Prezime size: ' + IntToStr(NepromenljiviPodaci.surnameSize));
  Memo1.Lines.Add('Ime size: ' + IntToStr(NepromenljiviPodaci.givenNameSize));

To je i provera koliko su tačno preneti podaci.
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 11:31 - pre 130 meseci
Citat:
tkaranovic: Pogrešne su dužine te koje su ispisane:
NepromenljiviPodaci.personalNumberSize: dužine 0
NepromenljiviPodaci.surnameSize: dužine 0
NepromenljiviPodaci.givenNameSize: prevelike dužine, zbog čega je i ta greška.

Inače je do te greške u dužinama došlo kod onog automatskog prevoda:
Code:

  tagEID_FIXED_PERSONAL_DATA = record
    personalNumber: array[0..EID_MAX_PersonalNumber - 1] of Integer;

treba:
Code:

  tagEID_FIXED_PERSONAL_DATA = record
    personalNumber: array[0..EID_MAX_PersonalNumber - 1] of Char;

Sjajno, to je bio problem, sada iščitava podatke kako treba.

Jedino preostaje problem prikaza ćiriličnog imena i prezimena (na slici).


Code (delphi):

  Memo1.Lines.Add('Prezime: ' + (NepromenljiviPodaci.surname));
  Memo1.Lines.Add('Prezime size: ' + IntToStr(NepromenljiviPodaci.surnameSize));
  Memo1.Lines.Add('Ime: ' + (NepromenljiviPodaci.givenName));
  Memo1.Lines.Add('Ime size: ' + IntToStr(NepromenljiviPodaci.givenNameSize));
 


Dužinu daje dobro (2 bajta za svako slovo), ali je ispis nečitljiv.

Ako odradim konverziju sa Utf8Decode umesto prikazanih kvakica sa slike, dobijem samo upitnike ("?????????????").
Prikačeni fajlovi
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 297
*.adsl-a-7.sezampro.rs.



+16 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 17:41 - pre 130 meseci
Kako inače prikazuješ/koristiš ćirilicu?

Trebalo bi da imaš neko trajnije rešenje ili ako nećeš da imaš onda moraš konvertovati ćirilicu u latinicu pa tako prikazati.
Evo jednog jednostavnog rešenja za prikazati ćirilicu:
Code:

...neki klik
 var
   S: AnsiString; // UTF8String;
  function WStrToAStr(const s: WideString; const CodePage: Word = CP_ACP): AnsiString;
  var
    InputLength, OutputLength: Integer;
  begin
    InputLength := Length(s);
    OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(s), InputLength, nil, 0, nil, nil);
    SetLength(Result, OutputLength);
    WideCharToMultiByte(CodePage, 0, PWideChar(s), InputLength, PAnsiChar(Result), OutputLength, nil, nil);
  end;
begin
  S := #209#130#208#186#208#176#209#128#208#176#208#189#208#190#208#178#208#184#209#134;
  //S je ut8 cirilicni string
  label1.Font.Charset := 204; //RUSSIAN_CHARSET iliti Cyrillic
  label1.Caption := WStrToAStr(Utf8Decode(S), 1251); //uf8->unicod->ansiCP1251  CP1251 - Cyrillic
end;

Može i da se prethodno izabere ćirlični font za label1.

Umesto S iz primera moze da bude ime ili prezime, šta je već tu ćirilično.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2665



+73 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll05.10.2010. u 18:06 - pre 130 meseci
> Koliko vidim poslednja verzija dll-a je 1.0.1.0, bar je ta okačena na sajtu MUP-a.

http://ca.mup.gov.rs/download.html.

Izmenio sam CelikApi i dodao nove funkcije.

> Pošto koristim D2006 koji ne radi sa unicode-om, a na LK su podaci upisani ćirilicom, pitanje je šta se zapravo upisuje u non-unicode Char recorde (npr. NepromenljiviPodaci.surname)?

Sadržaj u UTF8 formatu.

> Inače u okačenom primeru se vidi da iščitavanje podataka o LK i promenljivih podataka nije problem, pošto su upisani latinicom, a greška je samo kod nepromenljivih podataka
> o licu koji su upisani ćirilicom.

Da bi prikazao i latinicu i ćirilicu u kontroli moraš koristiti unicode kontrolu, dakle ili ti treba neki novi Delphi ili Tnt kontrola. Ja sam uzeo Tnt kontrolu jer će to rešenje raditi i na D7.

> Na kraju evo i primera sa sačuvanim ispisom podataka o LK u text fajlu.

To ništa ne znači, moraš snimiti raw podatke, šaljem primer.
Bilo bi dobro da neko proba i ove nove funkcije (EidReadDocumentData, PEidReadFixedPersonalDataP...).

Prikačeni fajlovi
 
Odgovor na temu

xcsdsgn
Ratko Kuzmić
Serbia

Član broj: 206272
Poruke: 32
*.dynamic.isp.telekom.rs.

Sajt: csdsgn.co.nr


Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 07:41 - pre 130 meseci
Bravo, podaci se uspesno iscitavaju, a sad jos jedno pitanje postoji i slika tj. Portrait kako do nje doci.....




 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 11:23 - pre 130 meseci
Evo zapažanja:

Delphi 2006 i TNT Unicode kontrole

NormReadDocumentData, NormReadFixedPersonalData i NormReadVariablePersonalData rade savršeno.
EidReadDocumentData, EidReadFixedPersonalData i EidReadVariablePersonalData prikazuju dobro sve osim prezimena i imena, gde se kuke i kvake i dalje prikazuju. (TntMemo)


Delphi 2010 (Trial) bez korišćenja TNT Unicode kontrola

NormReadDocumentData, NormReadFixedPersonalData i NormReadVariablePersonalData rade savršeno. (TMemo)
EidReadDocumentData, EidReadFixedPersonalData i EidReadVariablePersonalData prikazuju dobro sve osim prezimena i imena, gde se kuke i kvake i dalje prikazuju. (TMemo)

Btw, Savkiću, mislim da je
Code (delphi):

uses
  JclUnicode;
 
nepotrebno (u poslednjem CelikApiTest primeru).
 
Odgovor na temu

staleks
Aleksandar Stoisavljevic
Java Technical Team Leader
Novi Sad

Član broj: 10869
Poruke: 59
82.117.202.*

Sajt: www.staleksit.in.rs


+1 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 11:44 - pre 130 meseci
pozzz,

oduvek me je zanimalo da izadjem iz okvira programa informacionih sistema, odnosno da probam da software integrisem sa nekim hardwareom.

Ovo mi zvuci jako zanimljivo pre svega sa stanovista upotrebe. padaju mi razne ideje na pamet, recimo autentifikacija korisnika za koriscenje neke applikacije na osnovu LK. pa vec mora da je nosi, onda nek je i iskoristi za nesto pametno :)


Da li moze neko da mi kaze koji hardware koristite, gde moze da se nabavi, neke cene ? Iskustva ?

Hvala unapred.
 
Odgovor na temu

xcsdsgn
Ratko Kuzmić
Serbia

Član broj: 206272
Poruke: 32
*.dynamic.isp.telekom.rs.

Sajt: csdsgn.co.nr


Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 12:03 - pre 130 meseci
Pozdrav za staleks....

Ja koristim PC Twin reader, iskreno ne znam gde je kupljen ali gde god ima prodavnica racunarskih komponenti mozete kupiti i citac smart kartice.U svakom slucaju potrebno je da imas Hardver tj. Smart card reader, Driver, i celikapi.dll sa sajta MUP srbije.U Windowsu moras da pokrenes servis Smartcard i to je to.


Pozdrav naravno i vama savkic, tkaranovic ... koji ste obogatili odgovorima ovu temu
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2665



+73 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 15:46 - pre 130 meseci
> NormReadDocumentData, NormReadFixedPersonalData i NormReadVariablePersonalData rade savršeno. (TMemo)
> EidReadDocumentData, EidReadFixedPersonalData i EidReadVariablePersonalData prikazuju dobro sve osim prezimena i imena, gde se kuke i kvake i dalje prikazuju. (TMemo)

Ti onda ne konvertuješ dobro dobijeni tekst, pogledaj moje funkcije (NormXXX) i vidi kako je u njima urađeno. Takođe probaj ove funkcije bez struktura (EidReadDocumentDataP...)

> Bravo, podaci se uspesno iscitavaju, a sad jos jedno pitanje postoji i slika tj. Portrait kako do nje doci.....

Pogledaj u dokumentaciji u kom je formatu ta slika, ti ćeš dobiti niz bajtova posle poziva EidReadPortrait.
 
Odgovor na temu

xcsdsgn
Ratko Kuzmić
Serbia

Član broj: 206272
Poruke: 32
195.252.121.*

Sajt: csdsgn.co.nr


Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 15:56 - pre 130 meseci
Slika je u JPG formatu....
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2665



+73 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll06.10.2010. u 18:44 - pre 130 meseci
> Slika je u JPG formatu....

Pa onda preuzmi bajtove i snimi u neki fajl (koristi TFileStream, imaš primer kako se radi sa njim u onom mom testu).
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll07.10.2010. u 06:41 - pre 130 meseci
Citat:
savkic:Ti onda ne konvertuješ dobro dobijeni tekst, pogledaj moje funkcije (NormXXX) i vidi kako je u njima urađeno. Takođe probaj ove funkcije bez struktura (EidReadDocumentDataP...)

Nisam ništa konvertovao, samo sam iskoristio tvoj demo primer i u slučaju D2010 umesto TntMemo-a stavio običan Memo.

Za xcsdsgn - kod za čitanje slike sa LK:
Code (delphi):

procedure TForm1.btnSaveImageClick(Sender: TObject);
var
  Slika: TEidPortrait;
  f: TFileStream;
begin
  FillChar(Slika, SizeOf(TEidPortrait), 0);

  EidBeginRead('');
  EidReadPortrait(@Slika);
  EidEndRead;

  f := TFileStream.Create('Slika.jpg', fmCreate);
  try
    f.Write(Slika, SizeOf(TEidPortrait));
  finally
    f.Free;
  end;
end;
 


[Ovu poruku je menjao dogriz dana 07.10.2010. u 10:56 GMT+1]
 
Odgovor na temu

xcsdsgn
Ratko Kuzmić
Serbia

Član broj: 206272
Poruke: 32
*.dynamic.isp.telekom.rs.

Sajt: csdsgn.co.nr


Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll07.10.2010. u 07:50 - pre 130 meseci
Radi dogriz ....Cool
 
Odgovor na temu

manem78
Mane Mijin
programer 2dSoft
Novi Sad

Član broj: 189963
Poruke: 4
*.static.sbb.rs.



Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll13.12.2010. u 09:47 - pre 127 meseci
Pozdrav! Da se i ja prikljucim diskusiji. Imam jedan problem. Sto se citanja licnih karti iz Deplhija sve radi besprekorno. Medjutim ja koristim Delphi kako COM client za .NET aplikaciju. U Delphiju je implementiran rad sa Celikom, a iz .NET aplikacije pozivam proceduru za citanje licne karte iz COM-a. Kad testiram iz Delphija sve radi super, ali kad testiram iz VS2008 ili iz runtime-a Celik mi baca gresku EID_E_CARD_MISSING. Ima li neko ideju sta moze da bude problem? Hvala!
 
Odgovor na temu

manem78
Mane Mijin
programer 2dSoft
Novi Sad

Član broj: 189963
Poruke: 4
*.static.sbb.rs.



Profil

icon Re: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll13.12.2010. u 11:11 - pre 127 meseci
Resio sam tako sto vrtim svaki korak dok ne istera EID_OK ili dok ne bude broj pokusaja 5. Uglavnom iz drugog pokusaja uspe tako da radi dovoljno dobro :)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako iz delphi aplikacije procitati licnu kartu uz pomoc celikapi.dll

Strane: 1 2

[ Pregleda: 10562 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.