standard validator - homebeaver/ungueltig GitHub Wiki
standard-validator
Das Projekt standard-validator erweitert den apache validator und implementiert alle Algorithmen der [ISO IEC_7064]], der [ICAO und die der LUHN-Norm.
Das Programmpaket apache commons-validator ist etwas US-lastig und wird seit Jahren nur verwaltet. Es wurden keine neuen Funktionen hinzugefügt. Der Vorschlag zur Erweiterung mit Validatoren zu Leitweg-ID, französischen Handelsregister- und europäischen Steuernummern wurde nach langer Wartezeit abgelehnt weil man Wartungsaufwand scheut.
Das standard-validator jar- Artefakt berechnet und validiert
- Kreditkarten Nummern
- Nummern von Reisedokumenten und Führerscheinen
- Miles & More Kartennummern, Bahncard (auch ÖBB Vorteilscard)
- IBANs und US-Bankleitzahlen ABA RTN
- Kreditorreferenz (RF Creditor Reference, ISO-11649)
- alle europäischen VATIN Umsatzsteuer-Nummern
- Steuernummern TINs aus AT, DE, HR, ES, ...
- französische Handelsregister SIREN und SIRET Nummern
- chemische Nummern: CAS, EC index number für Gefahrenstoffe und EG‐Nummer im Chemikalienrecht
- IMO Schiffsnummern
- Leitweg-ID für elektronische Rechnungen
- Rechtsträger-Kennung LEI (Legal Entity Identifier), ISO-17442
package Struktur
Da standard-validator.jar den commons.validator von apache erweitert, sind alle packages gleich benannt und genauso strukturiert. Wichtig ist der Unterschied zwischen den Paketen validator.routines.checkdigit und validator.routines.
In validator.routines.checkdigit sind Verfahren zur Berechnung und zum Validieren von Prüfziffern implementiert, nicht aber die Struktur der codes. Alle Verfahren implementieren das Interface CheckDigit mit den Methoden calculate(code) und isValid(code) und leiten sich ab von ModulusCheckDigit
abstract class AbstractCheckDigit implements CheckDigit ...
// bzw.
public abstract class ModulusCheckDigit extends AbstractCheckDigit ...
public ModulusCheckDigit(int modulus) {
this.modulus = modulus;
}
public int getModulus() {
return modulus;
}
public String calculate(final String code) // implements interface mathod
...
int modulusResult = calculateModulus(code, false);
int charValue = (modulus - modulusResult) % modulus;
return toCheckDigit(charValue);
}
protected int calculateModulus(String code, boolean includesCheckDigit) {
...
return total % modulus;
}
public boolean isValid(final String code) // implements interface mathod
...
int modulusResult = calculateModulus(code, true);
return modulusResult == 0;
}
Die Validatoren in validator.routines prüfen die Struktur und Prüfziffer.