kk logo

Fast jeden Tag zücken wir an der Supermarktkasse ganz selbstverständlich unsere Karte oder das Smartphone. Ein kurzes "Piep", und der Einkauf ist erledigt. Aber was passiert in diesen Millisekunden eigentlich im Hintergrund? Wie "weiß" das Lesegerät, wer ich bin, und wie stellt die Bank sicher, dass ich mir den Einkauf überhaupt leisten kann? Auf dieser Seite möchte ich dir in vereinfachter und nachvollziehbarer Form zeigen, wie ein solches System technisch aufgebaut ist. Ich habe dazu ein voll funktionsfähiges Terminal und einen Bank-Server nachgebaut, um die Prinzipien der modernen Zahlungstechnik begreifbar zu machen.

MINT Projekt wie funktioniert eine Kartenzahlung 2

Das Prinzip: Ein digitaler Handschlag

In der Realität ist der Prozess hochkomplex und durch Schichten von Verschlüsselungen (wie RSA oder AES) und Sicherheitszertifikaten geschützt. Im Kern folgt er aber immer einem einfachen Dreierschritt:

  1. Das Terminal (Client): Liest die verschlüsselte Identität (UID) vom Chip und nimmt die PIN entgegen.
  2. Die Datenanfrage (Request): Das Terminal bündelt die Kontodaten, die PIN und den Betrag zu einem digitalen Paket und schickt es über das Internet an den Bank-Server.
  3. Die Bank (Server): Hier wird in Millisekunden geprüft: Existiert das Konto? Stimmt die PIN? Reicht das Guthaben (Bonitätsprüfung)? Nur wenn alles "Wahr" ist, wird das Geld umgebucht und das Terminal bekommt ein "Go".

MINT projekt wie funktioniert eine Bank EC karten Zahlung

Das Lesegerät: Hardware & Zustandsmaschine

Mein Terminal basiert auf einem Arduino, kombiniert mit einem RFID-Reader für den Chip-Scan und einem TM1638-Modul für die Tastatureingabe und Anzeige. Damit der Arduino nicht durcheinanderkommt, arbeitet er als sogenannte Zustandsmaschine (State Machine). Er befindet sich immer in einem definierten Zustand (z. B. "Warte auf Karte" oder "Warte auf PIN") und wechselt diesen nur, wenn eine korrekte Eingabe erfolgt. Zuerst wird der Betrag eingegeben und bestätigt, danach eine RFID Karte Vorgehalten und dann das Passwort eingegeben. 

Die 3 wichtigsten Code-Ausschnitte (Arduino)

1. Die Zustandsmaschine (Logik): Hier definieren wir die verschiedenen Phasen des Bezahlvorgangs. Das sorgt für Ordnung im Programmablauf.

C++
enum SystemState { WAIT_CARD, WAIT_PIN, SHOW_RESULT, INPUT_VALUE, WAIT_VALUE_CARD }; SystemState currentState = WAIT_CARD; // Startzustand
 

3. Die Netzwerkanfrage (HTTP POST): Das Terminal agiert als Client und "ruft" den Server über das HTTP-Protokoll an genau wie ein Browser eine Website aufruft.

C++
if (client.connect(pc_ip, 3000)) { client.println("POST /pay HTTP/1.1"); client.println("Content-Type: application/json"); client.print("Content-Length: "); client.println(postData.length()); client.println(); client.println(postData); }

 

Das Bankhaus: Der digitale Tresor

Der Server wurde mit Node.js und Express realisiert. Er ist das Gehirn des Systems. Hier liegen keine physischen Münzen, sondern nur Informationen in einer Datenbank (datenbank.json).

MINT Projekt wie funktioniert eine Kartenzahlung 1

Wenn eine Anfrage vom Terminal reinkommt, gleicht der Server diese mit seinen Datensätzen ab. Erst wenn die mathematische Prüfung (Guthaben - Betrag >= 0) erfolgreich ist, wird die Änderung permanent gespeichert. Nach der korrekten PIN wird der Betrag auf dem Konto abgezogen.

Die 3 wichtigsten Code-Ausschnitte (Server)

1. Die Kontenstruktur (JSON-Datenbank): Hier werden die Konten geführt. Wichtig: Wir rechnen in Cent, um Rundungsfehler bei Kommazahlen zu vermeiden.

JSON
{ "uid": "C3 E6 00 17", "name": "Karte 1", "pin": "1111", "guthaben": 5000 }
 

3. Die Abbuchung (Datensicherheit): Nach der Prüfung wird das neue Guthaben berechnet und die Datenbank aktualisiert, damit der Stand auch nach einem Server-Neustart erhalten bleibt.

JavaScript
kunde.guthaben -= reqBetrag; fs.writeFileSync('datenbank.json', JSON.stringify(db, null, 2)); res.json({ erfolg: true, restguthaben: kunde.guthaben });
Den Code zum Nachbauen

Da ein solches Projekt aus vielen kleinen Zahnrädern besteht, habe ich den gesamten Quellcode (Arduino-Skript, Server-Logik und das Web-Dashboard) auf GitHub veröffentlicht. So kannst du dir dein eigenes Finanzsystem aufbauen und experimentieren.

🔗 Link: https://github.com/kreativekiste/Arduino-JS-RFID-Bank-System

Fazit: Es ist keine Magie, sondern Mathematik

Kartenzahlung fühlt sich heute fast magisch an, aber dahinter steckt pure Logik. Es ist das Zusammenspiel aus Informatik (Protokolle und Datenbanken), Mathematik (Algorithmen und Subtraktion) und Elektrotechnik (RFID-Frequenzen).

Wenn du das nächste Mal im Supermarkt bezahlst, denk daran: In diesem Moment findet ein rasanter digitaler Dialog statt, der genau diesen Regeln folgt, die wir hier gerade am Modell ausprobiert haben.

Node.js starten

Damit das „Bankhaus“ auf deinem PC lebendig wird, braucht es die Node.js-Laufzeitumgebung. Die Installation und der Start sind in drei simplen Schritten erledigt:

  1. Installation: Lade die LTS-Version von herunter und installiere sie. Sie ist der "Motor", der deinen JavaScript-Code auf dem PC ausführt.
  2. Baukasten laden: Öffne deinen Projektordner im Terminal (cmd) und tippe npm install express. Damit lädst du den Webserver-Baukasten herunter, den wir für die Kommunikation mit dem Arduino nutzen.
  3. Start: Mit dem Befehl node server.js geht deine Bank live. Ab jetzt wartet sie auf Port 3000 auf eingehende Zahlungen.

🔌 Die Hardware-Verdrahtung (Pin-Belegung)

MINT projekt wie funktioniert eine Bank EC Karte

1. Basiskomponenten & Display (TM1638)

Modul-Pin Arduino-Pin Funktion
VCC 5V Stromversorgung
GND GND Masse
STB (Strobe) 7 Steuerung Display
CLK (Clock) 6 Taktsignal Display
DIO (Data) 5 Datensignal Display

2. RFID-Lesegerät (MFRC522)

Der RFID-Reader teilt sich den Datenbus (SPI) mit dem Ethernet Shield, braucht aber eigene Steuerleitungen.

Modul-Pin Arduino-Pin Funktion
SDA (SS) 9 Auswahl RFID-Chip
RST 8 Reset-Pin
SCK 13 SPI Takt (geteilt)
MOSI 11 SPI Daten Raus (geteilt)
MISO 12 SPI Daten Rein (geteilt)

3. Ethernet Shield (W5100/W5500)

Das Shield wird einfach auf den Arduino gesteckt. Intern nutzt es folgende Pins:

Funktion Arduino-Pin Hinweis
Chip Select 10 Fest durch Hardware belegt
SPI Bus 11, 12, 13 Fest durch Hardware belegt

 

Achtung beim RFID-Reader: Manche RFID-Module benötigen 3,3V statt 5V. Prüfe das unbedingt vor dem Anschließen, sonst könnte der Chip Schaden nehmen! In unserem Schaltplan nutzen wir die 5V-Toleranz des TM1638, aber beim RFID-Reader ist der 3.3V-Pin des Arduinos oft die sicherere Wahl für VCC.

Kontakt

visitenkarte

Ronnie

schwäbischer tüftler und bastler, kraftsportler, neurodivers, 45 Jahre, 1 Frau, 5 Kinder und 1003 Ideen. 

1.2 ronnie berzins