- Thema
- VB.NET
- Codebeispiele
- VB6 / VBScript (COM), C#
- Veröffentlicht
Kurz: Eine ZUGFeRD- oder Factur-X-Rechnung ist ein PDF – und lässt sich deshalb mit CodeB Wallet, der EUDI-Wallet von Aloaha für Android, direkt am Telefon digital signieren: als PAdES-Signatur mit vertrauenswürdigem Zeitstempel. Mit einer Signaturkarte per NFC (z. B. maltesische eID, D-Trust Card 5, Heilberufsausweis) ist die Signatur qualifiziert (QES), wenn das Zertifikat der Karte eine qualifizierte elektronische Signatur ausweist; ohne Karte entsteht mit dem CodeB-Signaturdienst eine fortgeschrittene elektronische Signatur (AdES). Die Signatur wird als inkrementelle Änderung angehängt – das eingebettete Rechnungs-XML bleibt unverändert. Mehrere Personen können nacheinander unterschreiben (Signaturanfrage), und ab Version 11.0.0.8 starten Sie das direkt aus der ZUGFeRD GUI, dem PDF Editor oder per SDK-Klasse WalletSignRequest.
Andere Begriffe für dasselbe: E-Rechnung am Handy unterschreiben, Rechnung digital signieren mit dem Smartphone, elektronische Unterschrift unter einer ZUGFeRD-PDF, Vier-Augen-Freigabe einer Eingangsrechnung, Fernsignatur mit der EU-Wallet.
Auf einen Blick: drei Wege
| Weg | Wer unterschreibt | Signaturart | Geeignet für |
|---|---|---|---|
| PDF in der App öffnen und „Selbst signieren“ | Sie selbst | QES mit Signaturkarte (wenn das Zertifikat es ausweist) oder AdES mit dem CodeB-Signaturdienst | einzelne Rechnung oder Gutschrift vor dem Versand |
Signaturanfrage auf phone.codeb.io/sign-request.html | Sie und/oder bis zu 5 eingeladene Personen nacheinander | je Person Karte (QES) oder Signaturdienst (AdES) | Freigabe im Vier-Augen-Prinzip, Unterschrift des Kunden |
ZUGFeRD GUI / PDF Editor oder SDK (WalletSignRequest) | wie Signaturanfrage – aus Ihrer Software gestartet | wie oben (Stufe „aes“ oder „qes“) | Rechnungen aus der eigenen Anwendung signieren lassen |
Zum Vergleich: Für den unbeaufsichtigten Stapelbetrieb mit einem Firmensiegel (ohne Telefon) gibt es die Fernsignatur SignPDFRemote / RemoteSigner.
Bleibt die ZUGFeRD-Rechnung nach dem Signieren gültig?
Ja, wenn die Signatur der letzte Schritt ist. CodeB Wallet hängt die Signatur als inkrementelle Änderung an: Der bisherige Inhalt der Datei und das eingebettete XML (factur-x.xml, zugferd-invoice.xml oder xrechnung.xml) bleiben Byte für Byte erhalten, frühere Signaturen bleiben gültig.
Wir haben das am 24.10.2026 geprüft: eine mit dem SDK erzeugte ZUGFeRD-PDF/A-3 wurde inkrementell mit PAdES signiert und vor und nach dem Signieren mit dem Mustang-Validator (2.26, mit veraPDF) geprüft. Ergebnis: Die PDF/A-3-Prüfung und die Prüfung des XML lieferten nach dem Signieren dasselbe Ergebnis wie vorher, der ursprüngliche Dateiinhalt war unverändert. Eine sichtbare Signatur ist PDF/A-konform, wenn ihr Erscheinungsbild ein Bild ist oder seine Schriften vollständig einbettet – eine Box mit nicht eingebetteter Standardschrift verletzt PDF/A (Regel 6.2.11.4.1). Prüfen Sie deshalb die erste signierte Rechnung mit Ihrem Validator, vor allem mit sichtbarer Signatur.
Stand 24.10.2026: Wir haben eine mit CodeB Wallet signierte ZUGFeRD-Rechnung geprüft – unsichtbar und mit sichtbarem Signaturfeld (eingebettete Schrift): beide blieben gültiges PDF/A-3, das XML unverändert. Auch die sichtbaren Felder, die der CodeB-Dienst selbst zeichnet (nur Name oder mit gezeichnetem Unterschriftsbild), haben wir geprüft: PDF/A-3-konform. Sichtbare Signaturen aus der App sind PDF/A-3-konform ab der nächsten App-Version; bis diese verfügbar ist, senden Sie Signaturanfragen für ZUGFeRD-Rechnungen am sichersten ohne sichtbare Signaturfelder (unsichtbare Signatur) – so arbeiten auch die ZUGFeRD GUI und der PDF Editor. Wir aktualisieren diesen Hinweis.
Wichtig: Nach dem Signieren darf die Datei nicht mehr verändert werden – auch kein erneutes Einbetten mit MergeXMLIntoPDF. Erst Rechnung erzeugen und einbetten, dann signieren.
Schritt für Schritt: selbst in der App signieren
- PDF öffnen: auf dem Startbildschirm Signieren wählen und die Rechnung aussuchen – oder das PDF aus einer anderen App (E-Mail, Dateien) an CodeB Wallet teilen und Selbst signieren tippen.
- Prüfen und Signaturart wählen: Seiten durchblättern, dann Mit Signaturkarte signieren oder Dokument signieren (CodeB-Signaturdienst).
- Optional sichtbare Signatur: mit dem Finger zeichnen, das Unterschriftsbild aus Reisepass, Personalausweis oder mobilem Führerschein verwenden oder nur den Namen – dann auf die Stelle in der Seitenvorschau tippen.
- Signieren: mit Karte die Zugangsnummer (CAN) eingeben, die Karte an die Rückseite des Telefons halten und die Signatur-PIN eingeben. Mit dem Signaturdienst öffnet sich der Browser: anmelden und genau dieses Dokument bestätigen.
- Speichern oder teilen: „Dokument signiert“ – die Rechnung auf dem Telefon speichern oder direkt teilen.






Welche Karten ergeben eine qualifizierte Signatur (QES)?
CodeB Wallet liest Signaturkarten per NFC; der Schlüssel verlässt den Chip nicht, die PIN geht nur über einen verschlüsselten PACE-Kanal und wird nicht gespeichert. Unterstützt werden:
- maltesische eID und maltesische Aufenthaltskarten – siehe Anleitung maltesische eID
- D-Trust Card 5 Signatur- und Siegelkarten – siehe Anleitung D-Trust
- Heilberufsausweis (HBA) und elektronische Gesundheitskarte (eGK) – siehe Anleitung Gesundheitskarten
Qualifiziert ist die Signatur nur, wenn das Zertifikat der Karte eine qualifizierte elektronische Signatur ausweist; die App zeigt das nach dem Signieren an. Für die Kartensignatur brauchen Sie weder ein Konto noch einen Browser.
Ohne Karte: fortgeschrittene Signatur mit dem CodeB-Signaturdienst
Mit einem kostenlosen CodeB-Konto signieren Sie ohne Karte: eine fortgeschrittene elektronische Signatur (AdES), PAdES mit vertrauenswürdigem Zeitstempel. Der Schlüssel liegt auf dem Server, jede Signatur bestätigen Sie selbst (Anmeldung und Bestätigung genau dieses Dokuments); das PDF bleibt auf dem Telefon, nur sein Hashwert geht an den Dienst. Das kostenlose Gastkonto signiert bis zu 5 eigene Dokumente am Tag; Dokumente, die andere Ihnen zur Unterschrift schicken, zählen nicht mit.
Das Konto legen Sie in der App in etwa zwei Minuten an (Menü → Einstellungen → kostenloses CodeB-Konto): Personalausweis (CAN) oder Reisepass (maschinenlesbare Zone) an das Telefon halten, E-Mail-Adresse bestätigen, fertig – siehe kostenloses CodeB-Konto. Es ist ein anhand des Ausweisdokuments geprüftes Gastkonto, keine amtlich bestätigte Identität.

Eine fortgeschrittene Signatur genügt für viele alltägliche Dokumente, aber nicht dort, wo das Gesetz eine qualifizierte Signatur verlangt – dann brauchen Sie eine Signaturkarte. Für den Versand einer E-Rechnung ist in Deutschland keine Signatur vorgeschrieben; sie belegt aber Herkunft und Unversehrtheit der Datei.
Mehrere Unterzeichner: Signaturanfrage
Auf phone.codeb.io/sign-request.html laden Sie ein oder mehrere PDFs hoch, wählen die Signaturart, ob Sie selbst zuerst unterschreiben, und laden bis zu 5 Personen per E-Mail ein (Gastkonten: 2) – in der gewünschten Reihenfolge, auf Wunsch mit einem Signaturfeld je Person. Ihre eigene Unterschrift leisten Sie, indem Sie den QR-Code mit CodeB Wallet scannen; die Eingeladenen erhalten eine E-Mail und unterschreiben in ihrer CodeB Wallet – jeweils mit Karte (QES, wenn das Zertifikat es ausweist) oder Signaturdienst (AdES). Am Ende erhalten alle den Link zum signierten PDF und einen Prüfbericht. Mehr dazu: PDFs mit CodeB Wallet signieren.
In der ZUGFeRD GUI und im PDF Editor (ab Version 11.0.0.8)
Im Register PDF signieren der Aloaha ZUGFeRD GUI und im Menü Werkzeuge → Mit CodeB Wallet signieren… des Aloaha PDF Editors startet die Schaltfläche Mit CodeB Wallet signieren… eine Signaturanfrage für die gewählte Rechnung:
- Einmalig auf phone.codeb.io/agent-approvals.html einen Agenten je Installation anlegen (benannt nach PC oder Programm) und Agent-ID und Geheimnis zusammen mit Ihrem CodeB-Benutzernamen eintragen (das Geheimnis wird auf Wunsch verschlüsselt für Ihren Windows-Benutzer gespeichert) – siehe Agent-ID und Agent-Geheimnis.
- Signaturanfrage senden: Das Programm zeigt einen Code; geben Sie die Anmeldung auf der Freigabeseite mit diesem Code frei.
- Die Rechnung wird hochgeladen. Unterschreiben Sie in CodeB Wallet (QR-Code auf
phone.codeb.io/sign-request.html); Eingeladene erhalten eine E-Mail. - Sobald alle unterschrieben haben, speichert das Programm das signierte PDF unter dem gewählten Namen.
Agent-ID und Agent-Geheimnis – was ist das?
Agent-ID und Agent-Geheimnis sind die eigene Anmeldung des Programms (ZUGFeRD GUI, PDF Editor oder Ihre Software mit dem SDK) bei CodeB – nicht Ihre persönliche Anmeldung. Ihr CodeB-Passwort gelangt nie in das Programm. Das Verfahren heißt OpenID CIBA: Das Programm fragt an, Sie geben frei.
- Agent anlegen (einmal je PC bzw. Installation): phone.codeb.io/agent-approvals.html öffnen, mit Ihrem CodeB-Konto anmelden, unter „Agents you added“ Add agent wählen und einen wiedererkennbaren Namen vergeben, z. B. „ZUGFeRD GUI – Büro-PC“ (der Name erscheint bei jeder Anfrage).
- Eintragen: die Agent-ID (Form
agent-…) und das Geheimnis, die CodeB für diesen Agenten vergibt, zusammen mit Ihrem CodeB-Benutzernamen in den Dialog übernehmen. Das Geheimnis behandeln Sie wie ein Passwort; mit „Agent-Geheimnis speichern“ legt das Programm es nur verschlüsselt für Ihren Windows-Benutzer ab. - Freigeben: Bei „Signaturanfrage senden“ zeigt das Programm einen 4-stelligen Code. Auf derselben Seite geben Sie die Anmeldung frei, wenn dort derselbe Code steht. Danach darf das Programm eine Stunde lang arbeiten (PDF hochladen, Status abfragen, signiertes PDF herunterladen); einen Verlängerungsschlüssel gibt es nicht – danach fragt es erneut.
| Frage | Antwort |
|---|---|
| Kann der Agent selbst unterschreiben? | Nein. Jede Signatur leistet eine Person in CodeB Wallet. Der Agent kann Anfragen anlegen, verfolgen, Personen einladen, zurückziehen und herunterladen – löschen bleibt Ihnen vorbehalten. |
| Wie viele Agenten? | Einen je Installation; CodeB erlaubt bis zu 10 Agenten je Konto. |
| Wie sperre ich einen Agenten? | Auf der Freigabeseite entfernen – das Programm kann dann innerhalb einer Minute nichts mehr tun. |
| Wofür der CodeB-Benutzername? | Damit CodeB weiß, wen es um Freigabe bittet. Es ist Ihr normaler CodeB-Benutzername (kostenloses Konto genügt). |
| Darf das Geheimnis in den Code? | Nein – in eigener Software aus einem geschützten Speicher laden (DPAPI, Windows-Anmeldeinformationsverwaltung), nie als Literal in Quelltext, Konfigurationsdateien oder PDFs. |
Für Entwickler: Signaturanfrage aus der eigenen Software (SDK)
Ab SDK-Version 11.0.0.8 gibt es die neue COM- und .NET-Klasse Aloaha_ZUGFeRD.WalletSignRequest. Sie nutzt die API für Signaturanfragen: Anmeldung des Programms per OpenID CIBA (Freigabe durch den Benutzer), Hochladen, Status abfragen und das signierte PDF herunterladen. Die bestehende COM-Schnittstelle der Klasse XML bleibt unverändert.
' VB6 / VBA (Late Binding)
Dim w As Object
Set w = CreateObject("Aloaha_ZUGFeRD.WalletSignRequest")
w.LicenseKey = "IHR-LIZENZSCHLUESSEL"
w.UserName = "ihr-codeb-benutzer"
w.AgentID = "agent-1234" ' von phone.codeb.io/agent-approvals.html
w.AgentSecret = AgentGeheimnisLesen() ' aus geschütztem Speicher (DPAPI / Anmeldeinformationsverwaltung) – nie als Literal im Code
w.Level = "aes" ' oder "qes" (nur Signaturkarte)
w.SignMyself = True
Call w.AddInvite("buchhaltung@example.com") ' optional: zweite Unterschrift
If w.RequestApproval() Then
MsgBox "Bitte auf " & w.ApprovalURL & " mit Code " & w.BindingMessage & " freigeben"
If w.WaitForApproval(300) Then
If w.CreateRequest("C:\Rechnungen\RE-2027-0001.pdf", "Rechnung RE-2027-0001") Then
' w.WalletLink = eudi-rqes://... für den QR-Code (oder phone.codeb.io/sign-request.html öffnen)
If w.WaitUntilSigned("C:\Rechnungen\RE-2027-0001_signiert.pdf", 1800) Then
MsgBox "Signiert:" & vbCrLf & w.SignersInfo
End If
End If
End If
End If
If w.LastError <> "" Then MsgBox w.LastError
// C# (.NET)
var w = new Aloaha_ZUGFeRD.WalletSignRequest();
w.LicenseKey = "IHR-LIZENZSCHLUESSEL";
w.UserName = "ihr-codeb-benutzer";
w.AgentID = "agent-1234";
w.AgentSecret = LoadAgentSecret(); // z. B. mit ProtectedData (DPAPI) gespeichert – nie als Literal im Code
w.Level = "aes";
if (w.RequestApproval() && w.WaitForApproval(300)
&& w.CreateRequest(@"C:\Rechnungen\RE-2027-0001.pdf", "Rechnung RE-2027-0001")
&& w.WaitUntilSigned(@"C:\Rechnungen\RE-2027-0001_signiert.pdf", 1800))
Console.WriteLine(w.SignersInfo);
else
Console.WriteLine(w.LastError);
| Mitglied | Bedeutung |
|---|---|
ServerURL | CodeB-Dienst, Standard https://phone.codeb.io (nur https) |
UserName, AgentID, AgentSecret | Anmeldung des Programms (Agent von der Freigabeseite); alternativ ein eigenes Zugriffstoken in AccessToken |
Level | "aes" (Karte oder Signaturdienst) oder "qes" (nur Signaturkarte, deren Zertifikat eine qualifizierte Signatur ausweist) |
SignMyself, AddInvite, Note | selbst zuerst unterschreiben, Eingeladene in Reihenfolge (bis 5, Gastkonten 2), Hinweis für die Unterzeichner |
AddSignatureField | sichtbares Signaturfeld je Unterzeichner (Seite ab 1, Rechteck in PDF-Punkten, mindestens 60 × 20); Appearance legt fest, was darin erscheinen darf. Für ZUGFeRD-Rechnungen derzeit weglassen (siehe PDF/A-Hinweis oben) |
RequestApproval, WaitForApproval | Freigabe des Programms (Code BindingMessage, Seite ApprovalURL); das Zugriffstoken gilt eine Stunde |
CreateRequest, RefreshStatus, WaitUntilSigned, DownloadSigned, Withdraw | Anfrage anlegen (PDF bis 40 MB), Status (Status, WalletLink, SignersInfo), warten und signiertes PDF speichern, zurückziehen |
LastError | Grund des letzten Fehlers, z. B. „HTTP 401 sign_in_required“; Geheimnis und Token erscheinen nie darin |
Das Upgrade auf Version 11.0.0.8 ist mit gültigem Wartungsvertrag kostenlos – Downloads, Preise.
Typische Fehler
- Nach dem Signieren geändert: Jede spätere Änderung (erneutes Einbetten, Stempel, Komprimieren) macht die Signatur ungültig. Signieren ist immer der letzte Schritt.
- „qes“ ohne passende Karte: Mit dem CodeB-Signaturdienst entsteht immer eine fortgeschrittene Signatur. Wer „qes“ verlangt, muss mit einer Signaturkarte unterschreiben, deren Zertifikat eine qualifizierte Signatur ausweist.
- Freigabe nicht erteilt:
WaitForApprovalwartet höchstens 5 Minuten. Der Code im Programm und auf der Freigabeseite muss übereinstimmen. - Tageslimit des Gastkontos: 5 eigene Dokumente am Tag; Anfragen anderer zählen nicht mit.
CodeB Wallet ist die EUDI-Wallet von Aloaha für Android – mehr auf der Seite CodeB Wallet und auf myeudi.app. Der Zugang zur App erfolgt auf Einladung; CodeB Wallet selbst ist nicht zertifiziert. Anleitungen: PDF signieren, Signaturfelder.
Häufige Fragen
Kann ich eine ZUGFeRD-Rechnung mit dem Handy signieren?
Ja. Eine ZUGFeRD- oder Factur-X-Rechnung ist ein PDF. In CodeB Wallet öffnen oder an die App teilen, Signaturart wählen und signieren: mit Signaturkarte per NFC oder ohne Karte mit dem CodeB-Signaturdienst.
Bleibt das ZUGFeRD-XML nach dem Signieren gültig?
Ja. Die Signatur wird als inkrementelle Änderung angehängt; der bisherige Inhalt und das eingebettete XML bleiben unverändert. In unserem Test lieferten PDF/A-3- und XML-Prüfung nach dem Signieren dasselbe Ergebnis wie vorher. Eine sichtbare Signatur muss ihre Schriften einbetten oder ein Bild sein, damit PDF/A erhalten bleibt.
Ist die Signatur mit CodeB Wallet qualifiziert?
Nur mit einer Signaturkarte, deren Zertifikat eine qualifizierte elektronische Signatur ausweist, zum Beispiel maltesische eID oder D-Trust-Signaturkarte. Mit dem CodeB-Signaturdienst ohne Karte entsteht eine fortgeschrittene elektronische Signatur (AdES).
Können mehrere Personen eine Rechnung unterschreiben?
Ja, mit einer Signaturanfrage auf phone.codeb.io/sign-request.html oder aus der ZUGFeRD GUI, dem PDF Editor bzw. per SDK-Klasse WalletSignRequest: bis zu 5 eingeladene Personen nacheinander, Gastkonten 2.
Wie starte ich die Signatur aus meiner eigenen Software?
Mit dem SDK-Klasse Aloaha_ZUGFeRD.WalletSignRequest ab Version 11.0.0.8: RequestApproval und WaitForApproval für die Freigabe, CreateRequest zum Hochladen, WaitUntilSigned zum Speichern des signierten PDFs. Sie funktioniert in .NET und per COM, zum Beispiel aus VB6, VBA oder Access.
Was kostet das?
Das kostenlose CodeB-Gastkonto signiert bis zu 5 eigene Dokumente am Tag; für die Kartensignatur ist kein Konto nötig. Das SDK-Funktion ist Teil des Aloaha ZUGFeRD SDK; mit gültigem Wartungsvertrag ist das Upgrade auf 11.0.0.8 kostenlos.
Was sind Agent-ID und Agent-Geheimnis bei CodeB Wallet?
Die eigene Anmeldung des Programms bei CodeB, nicht Ihr Passwort. Sie legen den Agenten einmal je PC auf phone.codeb.io/agent-approvals.html an und geben jede Anmeldung dort mit dem angezeigten 4-stelligen Code frei; der Zugriff gilt dann eine Stunde.
Kann das Programm mit Agent-ID und Geheimnis ohne mich unterschreiben?
Nein. Der Agent darf nur Signaturanfragen anlegen, verfolgen und herunterladen. Jede Unterschrift leistet eine Person in CodeB Wallet; ein entfernter Agent kann innerhalb einer Minute nichts mehr tun.