英数字の文字列を受け入れ、ISO 13616:2007に従って検証するプログラムを記述します(関数の本体で十分です)。検証のアルゴリズムは(出典:IBANに関するWikipediaの記事http://en.wikipedia.org/wiki/International_Bank_Account_Number):
IBANの検証IBANは、それを整数に変換し、基本的なmod-97操作(ISO 7064で説明)を実行して検証されます。IBANが有効な場合、残りは1になります。IBAN検証のアルゴリズムは次のとおりです。
- 国ごとにIBANの長さの合計が正しいことを確認してください。そうでない場合、IBANは無効です。正しいIBANの長さは次の場所にあります:http : //pastebin.com/kp4eECVk(以下にもあります)。IBAN番号の長さ順になっています。各番号の最初の2文字は国コードです。最初の2文字の後ろにある他のすべての文字(ペーストビンでは小文字ですが、実際のIBANでは大文字でもかまいません)には、任意の英数字を使用できます。
- 最初の4文字を文字列の末尾に移動します。
- 文字列の各文字を2桁に置き換えると、文字列が拡張され、A = 10、B = 11、...、Z = 35になります。
- 文字列を10進整数として解釈し、その数値の剰余を97で除算して計算します
残りが1の場合、チェックディジットテストに合格し、IBANが有効である可能性があります。
例(架空の英国の銀行、ソートコード12-34-56、口座番号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
アルゴリズムに従って、アルゴリズムは、数値が有効な場合はtrue(または真の値)を返し、無効な場合はfalse(または偽の値)を返します。番号が実際に存在するかどうかを確認する必要はありません。有効である場合のみです。アルゴリズムは、上記のウィキペディアの記事で言及されている、承認されたさまざまなIBAN番号のそれぞれに対して機能する必要があります。このアルゴリズムは、2つの英数字の間に区切り文字がある場合とない場合の両方の数値と互換性がある必要があります。区切り文字は、ピリオド、スペース、またはダッシュのいずれかで、1つの数字にさまざまなタイプの区切り文字を含めることができます。
通常の抜け穴が適用されます。外部リソース、組み込み関数、メソッドはありません。
パズルタイプはコードゴルフです。バイトカウントで最短のコードが優先されます。プログラムの実行に必要な標準のボイラープレート(名前空間、クラス、OOPでの関数宣言など)は、バイトカウントに含まれていません。
ボーナス:有効な数値の場合、trueの代わりに適切にフォーマットされたIBAN番号(Wikipediaの各国のフォーマットに従って)を返すことができる場合、スコアが25%減少します。数値が無効な場合は、値が「無効」のリテラル文字列を返します。
ペーストビンが削除された場合のIBANの長さのコピー:
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