für InterBase und FireBird | ||
Funktionen enthalten in der FreeAdhocUDF.dll/.so/.dylib : | ||
Prüfzahl Funktionen | 27 Funktionen | |
allgemeine
mathematische
Verfahren |
4 Funktion | |
angewendete
Prüfzahlen |
23 Funktionen | |
Output
RETURN
Mechanismus wenn nicht anderes angegeben: FREE_IT Die TestSQLs mit NULL funktionieren nur ab FireBird 2 |
Prüfzahl Funktionen: allgemeine mathematische Verfahren | ||||||||||||
Vorbemerkung
zu Prüfsummen aus
Wikipedia (http://de.wikipedia.org/wiki/Pr%C3%BCfsumme): Eine Prüfsumme ist eine einfache Maßnahme zur Gewährleistung von Datenintegrität bei der Datenübermittlung oder -speicherung. Ein einfaches Beispiel für eine Prüfsumme ist die Quersumme der Ziffern einer Zahl (http://de.wikipedia.org/wiki/Quersumme). Allerdings werden mit diesem Verfahren beispielsweise „Zahlendreher“, also ein häufig vorkommender Fehler in der Übertragung von numerischen Informationen, nicht erkannt. Prüfsummenverfahren, die mit einer bestimmten Gewichtung der einzelnen Summanden arbeiten, sind recht sicher gegenüber zufälligen Veränderungen, z. B. Zeichenvertauschungen, -verdopplungen oder -auslassungen. Sie werden beispielsweise angewendet bei der ISBN (International Standard Book Number) und bei den GTIN-Codes (früher: EAN-Code). Der Begriff „Prüfsumme“ wird auch für aufwendigere Prüfverfahren verwendet, die komplexere Berechnungen anstelle der einfachen Aufsummierung der Datenwerte vornehmen, so z. B. für die Zyklische Redundanzprüfung (ZRP, engl. CRC) (http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check). Eine ZRP verwendet statt einfacher Addition eine Polynomdivision und ist im Allgemeinen effektiver bei der Erkennung von Zufallsfehlern als eine primitive Prüfsumme. Obwohl eine herkömmliche Prüfsumme nützlich ist, um vor unbeabsichtigten Änderungen zu schützen, bietet sie keine Sicherheit gegenüber beabsichtigen Datenänderungen (Manipulation), da sie trivial zu umgehen ist. Es ist deshalb oft notwendig, anstelle eines einfachen Prüfsummenverfahrens kryptografisch stärkere Algorithmen, wie Einweg-Hash-Funktionen (z. B. Message Digests) (http://de.wikipedia.org/wiki/Hash-Funktion), zu benutzen. Eine ausführliche Beschreibung von Prüfsummen findet man u.a. unter http://www.pruefziffernberechnung.de/Startseite.shtml |
||||||||||||
F_CROSSSUM | Funktion von adhoc | |||||||||||
Entrypoint | crosssum | UTF-8 kompatibel | ||||||||||
Input | INTEGER |
natürliche
Zahl |
||||||||||
Output | INTEGER | Quersumme
von Input |
||||||||||
Die Quersumme
ist die Summe der Ziffernwerte
einer Zahl. Bsp. 12345: 5+4+3+2+1 = 15 Test-SQL SELECT 15 AS ISCORRECT, F_CROSSSUM(12345) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_CROSSSUM(NULL) FROM RDB$DATABASE; |
||||||||||||
F_CROSSDIFF | Funktion von adhoc | |||||||||||
Entrypoint | crossdiff | UTF-8 kompatibel | ||||||||||
Input | INTEGER |
natürliche Zahl | ||||||||||
Output | INTEGER | Querdifferenz
von Input |
||||||||||
Die
alternierende Quersumme (auch
Querdifferenz, Paarquersumme oder Wechselsumme genannt) erhält man,
indem man bei einer Zahl, beginnend ganz rechts, die Ziffernwerte
abwechselnd subtrahiert und addiert. Bsp. 12345: 5-4+3-2+1 = 3 Test-SQL SELECT 3 AS ISCORRECT, F_CROSSDIFF(12345) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_CROSSDIFF(NULL) FROM RDB$DATABASE; |
||||||||||||
F_WEIGHTCROSSSUM | Funktion von adhoc | |||||||||||
Entrypoint | weightcrosssum | UTF-8 kompatibel | ||||||||||
Input | INTEGER |
natürliche Zahl | ||||||||||
Output | INTEGER | Gewichtete
Quersumme von
Input |
||||||||||
Eine gewichtete
Quersumme erhält man, wenn man
die Ziffern erst mit ihrem Stelenwert multipliziert und diese
Ergebnisse dann addiert. Es wird dabei mit der niederwertigsten
Ziffer
begonnen Bsp. 12345: 5*1 + 4*2 + 3*3 + 2*4 + 1*5 = 35 Test-SQL SELECT 35 AS ISCORRECT, F_WEIGHTCROSSSUM(12345) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_WEIGHTCROSSSUM(NULL) FROM RDB$DATABASE; |
||||||||||||
F_ITERATECROSSSUM | Funktion von adhoc | |||||||||||
Entrypoint | iteratecrosssum | UTF-8 kompatibel | ||||||||||
Input | INTEGER |
natürliche Zahl | ||||||||||
Output | INTEGER | einstellige
(oder
iterierte) Quersumme von Input |
||||||||||
Von der
einfachen Quersumme wird weiter so
lange die Quersumme gebildet, bis nur noch eine einstellige Zahl
übrig
bleibt. Bsp. 12345: 5+4+3+2+1 = 15 -> 5+1 = 6 Test-SQL SELECT 6 AS ISCORRECT, F_ITERATECROSSSUM(12345) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ITERATECROSSSUM(NULL) FROM RDB$DATABASE; |
||||||||||||
Prüfzahl Funktionen: angewendete Prüfszahlen | ||||||||||||
F_ENCRYPTMD5 | kompatibel zu FreeUDFLibC | |||||||||||
Entrypoint | encryptmd5 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(128) | String, der verschlüsselt werden soll | ||||||||||
Output | CSTRING(33) | Input-String, verschlüsselt nach dem MD5 Algorithmus | ||||||||||
Diese
Funktion gibt nie <null>
zurück, da auch NULL eine gültigen MD5-Verschlüsselung ergibt. Achtung: der md5 des gleichen Strings einer ISO-Datenbank IST NICHT IDENTISCH mit dem md5 des GLEICHEN Strings aus einer UTF8-Datenbank! Nur mit gleichem Zeichensatzes (z.B. innerhalb einer Datenbank) sind Identitätsvergleiche zweier Strings mit md5 tauglich. TestSQL SELECT 'e7d31845480111fdba3316129e166860' AS ISCORRECT, F_ENCRYPTMD5('Pauline') FROM RDB$DATABASE; SELECT 'd41d8cd98f00b204e9800998ecf8427e' AS ISCORRECT, F_ENCRYPTMD5('') FROM RDB$DATABASE; |
||||||||||||
Vorbemerkung
zu GTIN-Nummern aus
Wikipedia (http://de.wikipedia.org/wiki/GTIN): Die Global Trade Item Number (GTIN) ist eine Identifikationsnummer, mit der Produkte und Packstücke weltweit eindeutig identifiziert werden können. GTIN ist ein Sammelbegriff für die Code-Schemata der Barcode-Kennzeichen mit der EAN oder dem Code des UCC und/oder auch der elektronischen Produktnummer, EPC, sämtlich vergeben und verwaltet von GS1. - EAN steht für International Article Number (früher European Article Number) - UCC steht für das Uniform Code Council, die sich auf Standardisierung spezialisiert hat und mittlerweile unter GS1 firmiert - das UCC hat zum Beispiel den Strichcode Universal Product Code (UPC) entwickelt - der Elektronische Produktcode (EPC) ermöglicht eine eindeutige Kennzeichnung von Objekten, z. B. Handelseinheiten, logistische Einheiten oder Transportbehälter - NVE steht für Nummer der Versandeinheit - Global Returnable Asset IDentifier (GRAI) dient zur Identifikation von wiederverwendbaren Verpackungen und Transporthilfsmitteln Ab dem 1. Januar 2009 steigt Deutschland auf die international verwendeten Begriffe im Bereich der GS1-Identifikations- und Strichcodestandards um. Die bereits 2005 festgelegten und weltweit gültigen Begriffe sind heute in fast allen der über 100 GS1-Organisationen umgesetzt.
|
||||||||||||
F_GTIN8CHECK | Funktion von adhoc | |||||||||||
Entrypoint | gtin8check | UTF-8 kompatibel | ||||||||||
F_UPC12CHECK | Funktion von adhoc | |||||||||||
Entrypoint | upc12check | UTF-8 kompatibel | ||||||||||
F_GTIN13CHECK | Funktion von adhoc | |||||||||||
Entrypoint | gtin13check | UTF-8 kompatibel | ||||||||||
F_GTIN14CHECK | Funktion von adhoc | |||||||||||
Entrypoint | gtin14check | UTF-8 kompatibel | ||||||||||
F_NVE18CHECK | Funktion von adhoc | |||||||||||
Entrypoint | nve18check | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) | Zahl als String | ||||||||||
Output | INTEGER | Prüfzahl
von Input |
||||||||||
Ermittlung der
Prüfzahl einer GTIN Nummer.
Eingegebene Leer-, Trenn- sowie Zeichen, die über die
maximale Anzahl hinausgehen, werden ignoriert. Test-SQL SELECT 0 AS ISCORRECT, F_GTIN8CHECK('1234567') FROM RDB$DATABASE; SELECT 0 AS ISCORRECT, F_GTIN8CHECK('1-2a3b4c5d6e7fxx999') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_GTIN8CHECK(NULL) FROM RDB$DATABASE; SELECT 2 AS ISCORRECT, F_UPC12CHECK('12345678901') FROM RDB$DATABASE; SELECT 7 AS ISCORRECT, F_GTIN13CHECK('762220000460') FROM RDB$DATABASE; SELECT 8 AS ISCORRECT, F_GTIN14CHECK('0123456789012') FROM RDB$DATABASE; SELECT 0 AS ISCORRECT, F_NVE18CHECK('01234567890123456') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_GTIN8CHECK(NULL') FROM RDB$DATABASE; |
||||||||||||
F_GTIN8 | Funktion von adhoc | |||||||||||
Entrypoint | gtin8 | UTF-8 kompatibel | ||||||||||
F_UPC12 | Funktion von adhoc | |||||||||||
Entrypoint | upc12 | UTF-8 kompatibel | ||||||||||
F_GTIN13 | Funktion von adhoc | |||||||||||
Entrypoint | gtin13 | UTF-8 kompatibel | ||||||||||
F_GTIN14 | Funktion von adhoc | |||||||||||
Entrypoint | gtin14 | UTF-8 kompatibel | ||||||||||
F_NVE18 | Funktion von adhoc | |||||||||||
Entrypoint | nve18 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) | Zahl als String | ||||||||||
Output | CSTRING(8...18) | Komplette
Nummer incl.
Prüfzahl |
||||||||||
Komplette
Ausgabe einer GTIN Nummer incl.
Prüfzahl.
Eingegebene Leer-, Trenn- sowie Zeichen, die über die
maximale Anzahl hinausgehen, werden ignoriert. Test-SQL SELECT '12345670' AS ISCORRECT, F_GTIN8('1234567') FROM RDB$DATABASE; SELECT '123456789012' AS ISCORRECT, F_UPC12('12345678901') FROM RDB$DATABASE; SELECT '7622200004607' AS ISCORRECT, F_GTIN13('762220000460') FROM RDB$DATABASE; SELECT '01234567890128' AS ISCORRECT, F_GTIN14('0123456789012') FROM RDB$DATABASE; SELECT '012345678901234560' AS ISCORRECT, F_NVE18('01234567890123456') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_GTIN8(NULL') FROM RDB$DATABASE; |
||||||||||||
Vorbemerkung
zu ISBN-Nummern aus Wikipedia (http://de.wikipedia.org/wiki/Internationale_Standardbuchnummer): Die Internationale Standardbuchnummer (International Standard Book Number), abgekürzt ISBN, ist eine Nummer zur eindeutigen Kennzeichnung von Büchern. Daneben können auch andere selbstständige Veröffentlichungen, wie beispielsweise Multimedia-Produkte und Software, mit einer ISBN gekennzeichnet werden, sofern sie einen redaktionellen Anteil enthalten. Bis 2006 hatte der Nummernraum einer ISBN zehn Stellen einschließlich einer Prüfziffer. Da es in Osteuropa und im englischen Sprachraum Schwierigkeiten gab, für neue Verlage und Publikationen Nummern zu vergeben, wurde die dreizehnstellige ISBN-13 eingeführt. Alte ISBN im zehnstelligen Format werden nun als ISBN-10 bezeichnet. Seit 1. Januar 2007 ist die Angabe der ISBN-13 verbindlich. Für andere Formen der Publikation, wie z. B. Periodika oder notierte Musikwerke gibt es eigene Nummernsysteme: - ISAN – International Standard Audiovisual Number - ISMN – Internationale Standard-Musik-Nummer (für gedruckte und digitalisierte Notensätze) - ISRC – The International Standard Recording Code - ISRN – International Standard Technical Report Number - ISSN – International Standard Serial Number / Internationale Standard-Seriennummer (für Periodika) - ISWC – International Standard Musical Work Code Das ISBN-System wurde an das System internationaler Artikelnummern GTIN (früher EAN) gekoppelt. Damit könnten Bücher weltweit innerhalb des GTIN-Systems in Warenwirtschaftssysteme übernommen werden, ohne dass aufwändige Neuauszeichnungen mit nationalen Strichcodes nötig sind. Darum sind ISBN-13 identisch mit der zum Buch gehörenden GTIN-13. Die Prüfziffernberechnung von ISBN-10 und ISBN-13 (= GTIN-13) sind verschieden. |
||||||||||||
F_ISBN10CHECK | Funktion von adhoc | |||||||||||
Entrypoint | isbn10check |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_ISBN10 | Funktion von adhoc | |||||||||||
Entrypoint | isbn10 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(13) | komplette,
formatierte
ISBN10-Nummer |
||||||||||
Feste Länge 10 Zeichen (mit Trennstrichen 13 Zeichen). Gültige
Zeichen
für die Eingabe sind 0-9, alle anderen Zeichen sowie alle Zeichen
die
über die Länge von 10
hinausgehen werden entfernt.
Test-SQL SELECT 3 AS ISCORRECT, F_ISBN10CHECK('3-88229-192') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISBN10CHECK(NULL) FROM RDB$DATABASE; SELECT '3-88229-192-3' AS ISCORRECT, F_ISBN10('3-88229-192') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISBN10(NULL) FROM RDB$DATABASE; |
||||||||||||
F_ISBN13CHECK | Funktion von adhoc | |||||||||||
Entrypoint | isbn13check |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_ISBN13 | Funktion von adhoc | |||||||||||
Entrypoint | isbn13 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(17) | komplette,
formatierte
ISBN13-Nummer |
||||||||||
Feste Länge 13
Zeichen (mit Trennstrichen 17
Zeichen). Gültige Zeichen
für die Eingabe sind 0-9, alle anderen Zeichen sowie alle Zeichen
die
über die Länge von 13
hinausgehen werden entfernt.
Test-SQL SELECT 6 AS ISCORRECT, F_ISBN13CHECK('978-3-88229-192') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISBN13CHECK(NULL) FROM RDB$DATABASE; SELECT '978-3-88229-192-6' AS ISCORRECT, F_ISBN13('978-3-88229-192') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISBN13(NULL) FROM RDB$DATABASE; |
||||||||||||
F_ISSN8CHECK | Funktion von adhoc | |||||||||||
Entrypoint | issn8check |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_ISSN8 | Funktion von adhoc | |||||||||||
Entrypoint | issn8 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(9) | komplette,
formatierte
ISSN8-Nummer |
||||||||||
Feste
Länge 8 Zeichen (mit Trenstrich 9 Zeichen). Gültige Zeichen
für
die Eingabe sind 0-9, alle anderen Zeichen sowie alle Zeichen die
über
die Länge von 8
hinausgehen werden entfernt. Test-SQL SELECT 9 AS ISCORRECT, F_ISSN8CHECK('0724-867') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISSN8CHECK(NULL) FROM RDB$DATABASE; SELECT '0724-8679' AS ISCORRECT, F_ISSN8('0724-867') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ISSN8(NULL) FROM RDB$DATABASE; |
||||||||||||
F_UPSTNCHECK | Funktion von adhoc | |||||||||||
Entrypoint | upstncheck |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_UPSTN | Funktion von adhoc | |||||||||||
Entrypoint | upstn | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(18) | komplette,
formatierte UPS
Tracking-Nummer |
||||||||||
UPS
Tracking-Nummer. Feste Länge 18 Zeichen. Gültige Zeichen für die Eingabe sind 0-9 und A-Z, alle anderen Zeichen sowie alle Zeichen die über die Länge von 18 hinausgehen werden entfernt. Test-SQL SELECT 6 AS ISCORRECT, F_UPSTNCHECK('1Z 591580 68 5558773') FROM RDB$DATABASE; SELECT 6 AS ISCORRECT, F_UPSTNCHECK('591580685558773') FROM RDB$DATABASE; SELECT 6 AS ISCORRECT, F_UPSTNCHECK('59158068555877311111111') FROM RDB$DATABASE; SELECT 3 AS ISCORRECT, F_UPSTNCHECK('1Z 0F6915 68 2239322') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_UPSTNCHECK(NULL) FROM RDB$DATABASE; SELECT '1Z 591580 68 55587736' AS ISCORRECT, F_UPSTN('1Z 591580 68 5558773') FROM RDB$DATABASE SELECT '1Z 0F6915 68 22393223' AS ISCORRECT, F_UPSTN('1Z 0F6915 68 22393223') FROM RDB$DATABASE SELECT NULL AS ISCORRECT, F_UPSTN(NULL) FROM RDB$DATABASE; |
||||||||||||
F_2OF5CHECK | Funktion von adhoc | |||||||||||
Entrypoint | twooffivecheck |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_2OF5 | Funktion von adhoc | |||||||||||
Entrypoint | twooffive | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(13) | komplette
2of5-Nummer |
||||||||||
2 aus 5 (2 of 5)
Nummer. Variable Länge. Gültige Zeichen für die Eingabe sind 0-9, alle anderen Zeichen werden entfernt. Für beide Prüfziffern 2of5 industry und 2of5 interleaved geeignet. Test-SQL SELECT 5 AS ISCORRECT, F_2OF5CHECK('123456') FROM RDB$DATABASE; SELECT 5 AS ISCORRECT, F_2OF5CHECK('ABC123456XYZ') FROM RDB$DATABASE; SELECT 0 AS ISCORRECT, F_2OF5CHECK('1234567') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_2OF5CHECK(NULL) FROM RDB$DATABASE; SELECT '1234565' AS ISCORRECT, F_2OF5('123456') FROM RDB$DATABASE; SELECT '12345670' AS ISCORRECT, F_2OF5('1234567') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_2OF5(NULL) FROM RDB$DATABASE; |
||||||||||||
F_CODE39CHECK | Funktion von adhoc | |||||||||||
Entrypoint | code39check |
UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | INTEGER | ermittelte
Prüfzahl von
Input |
||||||||||
F_CODE39 | Funktion von adhoc | |||||||||||
Entrypoint | code39 | UTF-8 kompatibel | ||||||||||
Input | CSTRING(250) |
zu prüfenden Nummer als String | ||||||||||
Output | CSTRING(13) | komplette
Code-39-Nummer |
||||||||||
Code-39 (3 aus
9, 3 of 9) Nummer. Variable Länge. Gültige Zeichen sind 0-9, A-Z und $ % + - . / sowie Leerzeichen, alle anderen Zeichen werden entfernt. Test-SQL SELECT 'K' AS ISCORRECT, F_CODE39CHECK('AB-123') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_CODE39CHECK(NULL) FROM RDB$DATABASE; SELECT 'AB-123K' AS ISCORRECT, F_CODE39('AB-123') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_CODE39(NULL) FROM RDB$DATABASE; |
||||||||||||