Schreiben Sie ein Programm (der Hauptteil der Funktion reicht aus), das eine Zeichenfolge alphanumerischer Zeichen akzeptiert und gemäß ISO 13616: 2007 validiert. Der Validierungsalgorithmus lautet (Quelle: Wikipedia-Artikel auf IBAN http://en.wikipedia.org/wiki/International_Bank_Account_Number ):
Validierung der IBAN Eine IBAN wird validiert, indem sie in eine Ganzzahl konvertiert und eine grundlegende Mod-97-Operation (wie in ISO 7064 beschrieben) ausgeführt wird. Wenn die IBAN gültig ist, ist der Rest gleich 1. Der Algorithmus der IBAN-Validierung lautet wie folgt:
- Überprüfen Sie, ob die gesamte IBAN-Länge je nach Land korrekt ist. Wenn nicht, ist die IBAN ungültig. Die korrekten IBAN-Längen finden Sie hier: http://pastebin.com/kp4eECVk ( siehe auch unten), sortiert nach der Länge der IBAN-Nummer. Die ersten 2 Zeichen jeder Nummer sind die Landesvorwahl. Alle anderen Zeichen (Kleinbuchstaben auf dem Pastebin, können aber in der tatsächlichen IBAN beliebig sein) hinter den ersten 2 können beliebige alphanumerische Zeichen sein.
- Verschieben Sie die vier Anfangszeichen an das Ende der Zeichenfolge.
- Ersetzen Sie jeden Buchstaben in der Zeichenfolge durch zwei Ziffern, wodurch die Zeichenfolge erweitert wird, wobei A = 10, B = 11, ..., Z = 35.
- Interpretieren Sie die Zeichenfolge als Dezimalzahl und berechnen Sie den Rest dieser Zahl bei Division durch 97
Wenn der Rest 1 ist, ist der Prüfziffertest bestanden und die IBAN ist möglicherweise gültig.
Beispiel (fiktive Bank in Großbritannien, Bankleitzahl 12-34-56, Kontonummer 98765432):
- IBAN: GB82 WEST 1234 5698 7654 32 - Rearrange: W E S T12345698765432 G B82 - Convert to integer: 3214282912345698765432161182 - Compute remainder: 3214282912345698765432161182 mod 97 = 1
Der Algorithmus kann true (oder einen wahrheitsgemäßen Wert) zurückgeben, wenn die Zahl gültig ist, und false (oder einen falschen Wert), wenn die Zahl gemäß dem Algorithmus ungültig ist. Sie müssen nicht überprüfen, ob die Nummer tatsächlich vorhanden ist, sondern nur, wenn sie gültig ist. Der Algorithmus muss für jede der verschiedenen genehmigten IBAN-Nummern funktionieren, die im obigen Wikipedia-Artikel erwähnt werden. Der Algorithmus sollte mit Zahlen mit oder ohne Trennzeichen zwischen zwei alphanumerischen Zeichen kompatibel sein. Das Trennzeichen kann entweder Punkte, Leerzeichen oder Bindestriche sein, und eine Zahl kann verschiedene Arten von Trennzeichen enthalten.
Es gelten die üblichen Lücken: keine externen Ressourcen, keine integrierten Funktionen oder Methoden.
Der Puzzletyp ist Code Golf. Der kürzeste Code in Bytecount gewinnt. Das zur Ausführung des Programms erforderliche Standard-Boilerplate (z. B. Namespace, Klasse, Funktionsdeklaration in OOP) ist nicht in der Anzahl der Bytes enthalten.
Bonus: Wenn Sie die korrekt formatierte IBAN-Nummer (gemäß dem nationalen Format auf Wikipedia) anstelle von true im Fall einer gültigen Nummer zurückgeben können, erhalten Sie eine 25% ige Reduzierung Ihrer Punktzahl. Wenn die Zahl ungültig ist, geben Sie eine Literalzeichenfolge mit dem Wert "Ungültig" zurück.
Kopie der IBAN-Längen für den Fall, dass der Pastebin jemals entfernt wird:
Country;Chars;IBAN Fields
Norway;15;NOkk bbbb cccc ccx
Belgium;16;BEkk bbbc cccc ccxx
Burundi;16;BIkk nnnn nnnn nnnn
Denmark;18;DKkk bbbb cccc cccc cc
Faroe Islands;18;FOkk bbbb cccc cccc cx
Finland;18;FIkk bbbb bbcc cccc cx
Greenland;18;GLkk bbbb cccc cccc cc
Netherlands;18;NLkk bbbb cccc cccc cc
Macedonia;19;MKkk bbbc cccc cccc cxx
Slovenia;19;SIkk bbss sccc cccc cxx
Austria;20;ATkk bbbb bccc cccc cccc
Bosnia and Herzegovina;20;BAkk bbbs sscc cccc ccxx
Estonia;20;EEkk bbss cccc cccc cccx
Kazakhstan;20;KZkk bbbc cccc cccc cccc
Lithuania;20;LTkk bbbb bccc cccc cccc
Luxembourg;20;LUkk bbbc cccc cccc cccc
Costa Rica;21;CRkk bbbc cccc cccc cccc c
Croatia;21;HRkk bbbb bbbc cccc cccc c
Latvia;21;LVkk bbbb cccc cccc cccc c
Liechtenstein;21;LIkk bbbb bccc cccc cccc c
Switzerland;21;CHkk bbbb bccc cccc cccc c
Bahrain;22;BHkk bbbb cccc cccc cccc cc
Bulgaria;22;BGkk bbbb ssss ddcc cccc cc
Georgia;22;GEkk bbcc cccc cccc cccc cc
Germany;22;DEkk bbbb bbbb cccc cccc cc
Ireland;22;IEkk aaaa bbbb bbcc cccc cc
Montenegro;22;MEkk bbbc cccc cccc cccc xx
Serbia;22;RSkk bbbc cccc cccc cccc xx
United Kingdom;22;GBkk bbbb ssss sscc cccc cc
Gibraltar;23;GIkk bbbb cccc cccc cccc ccc
Israel;23;ILkk bbbn nncc cccc cccc ccc
United Arab Emirates;23;AEkk bbbc cccc cccc cccc ccc
Andorra;24;ADkk bbbb ssss cccc cccc cccc
Czech Republic;24;CZkk bbbb ssss sscc cccc cccc
Moldova;24;MDkk bbcc cccc cccc cccc cccc
Pakistan;24;PKkk bbbb cccc cccc cccc cccc
Romania;24;ROkk bbbb cccc cccc cccc cccc
Saudi Arabia;24;SAkk bbcc cccc cccc cccc cccc
Slovakia;24;SKkk bbbb ssss sscc cccc cccc
Spain;24;ESkk bbbb gggg xxcc cccc cccc
Sweden;24;SEkk bbbc cccc cccc cccc cccx
Tunisia;24;TNkk bbss sccc cccc cccc cccc
Virgin Islands;24;VGkk bbbb cccc cccc cccc cccc
Algeria;24;DZkk nnnn nnnn nnnn nnnn nnnn
Portugal;25;PTkk bbbb ssss cccc cccc cccx x
Angola;25;AOkk nnnn nnnn nnnn nnnn nnnn n
Cape Verde;25;CVkk nnnn nnnn nnnn nnnn nnnn n
Mozambique;25;MZkk nnnn nnnn nnnn nnnn nnnn n
Iceland;26;ISkk bbbb sscc cccc iiii iiii ii
Turkey;26;TRkk bbbb bxcc cccc cccc cccc cc
Iran;26;IRkk nnnn nnnn nnnn nnnn nnnn nn
France;27;FRkk bbbb bggg ggcc cccc cccc cxx
Greece;27;GRkk bbbs sssc cccc cccc cccc ccc
Italy;27;ITkk xaaa aabb bbbc cccc cccc ccc
Mauritania;27;MRkk bbbb bsss sscc cccc cccc cxx
Monaco;27;MCkk bbbb bsss sscc cccc cccc cxx
San Marino;27;SMkk xaaa aabb bbbc cccc cccc ccc
Burkina Faso;27;BFkk nnnn nnnn nnnn nnnn nnnn nnn
Cameroon;27;CMkk nnnn nnnn nnnn nnnn nnnn nnn
Madagascar;27;MGkk nnnn nnnn nnnn nnnn nnnn nnn
Albania;28;ALkk bbbs sssx cccc cccc cccc cccc
Azerbaijan;28;AZkk bbbb cccc cccc cccc cccc cccc
Cyprus;28;CYkk bbbs ssss cccc cccc cccc cccc
Dominican Republic;28;DOkk bbbb cccc cccc cccc cccc cccc
Guatemala;28;GTkk bbbb cccc cccc cccc cccc cccc
Hungary;28;HUkk bbbs sssk cccc cccc cccc cccx
Lebanon;28;LBkk bbbb cccc cccc cccc cccc cccc
Poland;28;PLkk bbbs sssx cccc cccc cccc cccc
Benin;28;BJkk annn nnnn nnnn nnnn nnnn nnnn
Ivory Coast;28;CIkk annn nnnn nnnn nnnn nnnn nnnn
Mali;28;MLkk annn nnnn nnnn nnnn nnnn nnnn
Senegal;28;SNkk annn nnnn nnnn nnnn nnnn nnnn
Brazil;29;BRkk bbbb bbbb ssss sccc cccc ccct n
Palestinian;29;PSkk bbbb xxxx xxxx xccc cccc cccc c
Qatar;29;QAkk bbbb cccc cccc cccc cccc cccc c
Ukraine;29;UAkk bbbb bbcc cccc cccc cccc cccc c
Jordan;30;JOkk bbbb nnnn cccc cccc cccc cccc cc
Kuwait;30;KWkk bbbb cccc cccc cccc cccc cccc cc
Mauritius;30;MUkk bbbb bbss cccc cccc cccc cccc cc
Malta;31;MTkk bbbb ssss sccc cccc cccc cccc ccc