Krankenversichertenkarte auslesen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
xellos
Rookie
Rookie
Beiträge: 19
Registriert: So, 10. Sep 2006 18:57
Wohnort: Maintal

Krankenversichertenkarte auslesen

Beitrag von xellos »

Hallo,

ich muss eine Krankenversichertenkarte auslesen, Versichertennummer, Name, Adresse, etc. (cyberJack Kartenleser). Ich habe gesehen, dass die CT-API mittels ctrsct32.dll bzw. ct32.dll und der Funktion CT_data die Möglichkeit bietet dies zu tun. Leider finde ich nirgends eine brauchbare Parameterbeschreibung.
Hat jemand eine selbige für mich, bzw. kann mir sagen, wo ich eine finden kann?

Vielen Dank für Eure Hilfe
Timo
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Timo,

was ist denn mit dem Hersteller ? Hat der denn nichts ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

@Timo: Kann ich Dir morgen alles sagen.
Herzlich,
Tom
xellos
Rookie
Rookie
Beiträge: 19
Registriert: So, 10. Sep 2006 18:57
Wohnort: Maintal

Beitrag von xellos »

Hallo,
ich habe jetzt alle notwendigen Informationen und hänge am DLLCall fest. Dieser lautet:

DllCall( nDll, DLL_CDECL, "CT_data", 1, @dad, @sad, len, command, @lenr, response )

command erwartet eine Referenzadresse eines Feldes mit Elementen vom Typ integer unsigned 8Bit, die das Kommando enthalten,
len ist die Länge des Kommandos in Byte
response die entsprechende Adresse der Antwort und lenr die Länge der Antwort.

XBase kann ja nicht mit Pointer arbeiten, ist es somit richtig, dass ich mit XBase Bordmittel die Funktion nicht ausführen kann, oder gibt es dennoch eine Lösung?

Grüße
Timo
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo Timo

Hast du schon bei Orga angerufen? Die Sind sehr hilfsbereit und haben uns ein C-Beispiel zugeschickt.

Hier ein kleines Beispiel zum reseten eines SICCT, hab ich vom C-Beispiel von Orga umgemünzt.

Der Aufruf:

Code: Alles auswählen

    //## 1st STEP: Laden der ctApi.dll
    //-- DLL-Laden
    nDll := DllLoad( "CTORG32.dll" )
    if(nDll != 0)

        //## 2nd STEP: Verbinden mit dem Terminal
        //-- DLL-Init
        iCtn := 1   //-- Logical card terminal number
        iPN  := 1   //-- Port COM1
        nInit:= dllCall( nDll, DLL_STDCALL, "CT_init",iCtn, iPN)
        if(nInit != 0)

            //## 3rd STEP: Reset The Terminal
            //-- RESET - Kartenterminal
            nReturn := resetCT ( nDll, iCtn )
Die Reset-Function:

Code: Alles auswählen

FUNCTION resetCT ( nDll, iCtn )
    LOCAL nData     := 0
    LOCAL cDad      := 0x01             //-- destination address (receiver)
    LOCAL cSad      := 0x02             //-- source address (sender)
    LOCAL iLenc     := 127              //-- length command
    LOCAL cCommand  := SPACE(127)       //-- ICC or CT command.
    LOCAL iLenr     := 1031             //-- length response
    LOCAL cResponse := SPACE(1031)      //-- Response to the command

    //-- Kommando für Reset
    cCommand := Chr(0x20)+Chr(0x11)+Chr(0x00)+Chr(0x00)+Chr(0x00)
    iLenc    := LEN(cCommand)

    //-- Rückgabe
    iLenr    := 1031
    cResponse:= replicate(Chr(0x00),iLenr)

    //-- DLL-Data
    nData:= dllCall( nDll, DLL_STDCALL, "CT_data",iCtn, @cDad, @cSad, iLenc,;
                                                  @cCommand, @iLenr, @cResponse)
    if(nData == 0)
        if ((iLenr >= 2).And.(iLenr <= 1031)).And.;
            (cResponse[iLenr-1] == Chr(0x90) ).And.;
            (cResponse[iLenr]   == Chr(0x00) )
            cLog := cLog + "STATE: RESET CT successful!"+cEol
            //? "STATE: RESET CT successful!"
        else
            cLog := cLog + "STATE: RESET CT unsuccessful!"+cEol
            //? "STATE: RESET CT unsuccessful!"
        endif
    endif
RETURN nData
Grüße Rolf
xellos
Rookie
Rookie
Beiträge: 19
Registriert: So, 10. Sep 2006 18:57
Wohnort: Maintal

Beitrag von xellos »

Hallo Rolf,

vielen Dank für Deine Info. Ein C Beispielprogramm liegt mir auch vor, ich wusste aber nicht, dass XBase auch Werte in Hex verarbeiten kann. Das vereinfacht Vieles.

An die Daten werden ich jetzt hoffentlich auch noch ran kommen.

Viele Grüße
Timo
Antworten