Smartcards auslesen
-
Hallo,
ich habe einen Chipkartenleser an meinem PC. Jede Karte besitzt ja eine eindeutige Kartennummer. Jetzt möchte ich diese Kartennummer auslesen.
Mit der ct-api habe ich es nicht hinbekommen. Muss wohl meinen Kartenleser über
PC/SC - Schnittstelle ansprechen.Gibt es da eine Komponente im CBuilder der dies ermöglicht. Oder eine Library die einen Zugriff ermöglicht ?
Danke !!!
-
meine erfahrungen:
ganz so einfach ist das wohl nicht. mir ist selber von keiner komponente im cbuilder bekannt die für alle reader und karten gültig wäre. du solltest diese zwei dinge mal genauer spezifizieren! (kontaktlos, kontaktbehaftet, kartentyp, usw)
wenn du ein handelsübliches modell mit handelsüblicher karte hast, dürfte es entsprechende programme zum auslesen schon geben.
Anderfalls gilt:
oft werden von den terminalherstellern apis zur verfügung gestellt, die auf low-level ebene zugriffsfunktionalität bereit stellen. ein programm dazu musst du dir selber schreiben, wobei du bei einem allgemeinen verfahren chipkarten-betriebssystemabhängig die kommandos aufbauen musst.desweiteren solltest du kenntnisse über den filesystemaufbau der karte haben, und wo deine daten "versteckt" sind.
im grossen und ganzen bist du im open-source-bereich wohl besser aufgehoben, wenn du nicht für eine firma arbeitest.
hier kann ich folgenden startpunkt empfehlen:
http://www.libchipcard.de/
-
Erst mal Danke,
es gibt wohl unter Windows eine dll, die heisst
WINSCARD.dll. Der CBuilder hat sogar die Header Datei dazu. Doch irgendwie funktioniert diese DLL nicht sauber, oder ich mache was falsch. Die erste Funktion meldet mir schon einen Fehlercode zurück.
Die Funktion heisst SCardEstablishContext und sollte den Wert 0 zurückliefern. Ich bekomme aber immer einen Fehlercode.Ich nutze CHipkarten.
Danke!!!
-
servus!
wenn du schwierigkeiten hast muss deine themenbeschreibung viel genauer werden; mit deinen informationen kann man NULL helfen.
lies dir mein kommentar nochmals durch und gib informationen zu
a) aufgabenbereich deines projekts
b) was für chipkarten du verwendest
c) codeschnipselmfg
-
Hallo!
Also das jede Karte eine eindeutige Kartennummer hat, kann ich nicht bestätigen.
Es gibt viele verschiedene Arten von Chipkarten. Es gibt welche mit Pin, welche ohne, und der Speicher ist bei den auch noch verschieden.
Dann gibt es noch Microprozessor-gesteuerte Chipkarten, diese mit verschiedenen ansteuerungs-Protokollen.Ich habe auch einen Chipkartenleser (Chipdrive).
Diesen steuere ich mit der SCARD32.DLL an.
Darüber kann ich halt den z.B. den Inhalt von Versicherungskarten, Geldkarten, Telefonkarten, usw. auslesen.
Auch andere Karten werden unterstützt, jedoch muss man das Protokoll zum Teil selbst implementieren.Grüße
-
Genscher schrieb:
Ich habe auch einen Chipkartenleser (Chipdrive).
Diesen steuere ich mit der SCARD32.DLL an.
Darüber kann ich halt den z.B. den Inhalt von Versicherungskarten, Geldkarten, Telefonkarten, usw. auslesen.Hallo
Könntest du mir vielleicht sagen wie man mit hilfe der scard32.dll daten mit c++ einlesen kann?(den quelltext vielleicht hier rein schreiben)IST SEHR WICHTIG, danke im Vorraus!!!!!!!
-
Hallo!
So einfach geht das nicht!
1. Das sind ca. 700 Zeilen Code um von einer Chipkarte Daten einzulesen, anzuzeigen und anschließend auszugeben.
Wie gesagt, es gibt von Towi...naja, von der Firma, die diese Chipdrives herstellt eine Dokumentation von der API zum Download. Link habe ich gerad enicht, einfach mal googeln.
Da es sich um ein textbasiertes Interface handelt (d.h. die Kommandos werden im Stil von "Unlock, Chipdrive1" übergeben) ist das ganze auch nicht "eben schnell" zu realisieren. Es gibt halt X Funktionen mit Y Optionen.
Damit du dies Forum aber nicht umsonst besucht hast, hier der "Anfang":
LPCSTR ist einfach durch "string" oder "AnsiString" zu ersetzen (ist halt schnell aus VC++ kopiert).typedef DWORD (__stdcall *SCardCmd)(LPDWORD Handle, LPCSTR Cmd, LPINT CmdLen, LPCSTR DataIn, LPINT DataInLen, LPCSTR DataOut, LPINT DataOutLen); SCardCmd pSCardCommand = NULL; hScardDLL = LoadLibrary("SCARD32.DLL"); if (!hScardDLL) { Application->MessageBox("Could not open SCARD32.DLL","Error",MB_OK); return 0; } else pSCardCommand = (SCardCmd)GetProcAddress(hScardDLL, "SCardComand");
Notfalls gib einfach mal deine eMail-Adresse.
Grüße
-
Genscher schrieb:
Notfalls gib einfach mal deine eMail-Adresse.
Erst einmal danke für deine Antwort. Ich gebe dir aber trotdem mal meine eMail add. da ich nicht umbedingt ein Programmier Ass bin, bin ich auf jede Hilfe angewiesen.
meine add ist : unique19@gmx.net