Tulis sebuah program (isi fungsinya cukup) yang menerima serangkaian karakter alfanumerik dan memvalidasinya sesuai dengan ISO 13616: 2007. Algoritma untuk validasi adalah (sumber: artikel wikipedia di IBAN http://en.wikipedia.org/wiki/International_Bank_Account_Number ):
Memvalidasi IBAN IBAN divalidasi dengan mengubahnya menjadi integer dan melakukan operasi mod-97 dasar (seperti yang dijelaskan dalam ISO 7064) di atasnya. Jika IBAN valid, sisanya sama dengan 1. Algoritma validasi IBAN adalah sebagai berikut:
- Pastikan total panjang IBAN sudah benar sesuai negara. Jika tidak, IBAN tidak valid. Panjang IBAN yang benar dapat ditemukan di sini: http://pastebin.com/kp4eECVk (juga dapat ditemukan di bawah), dipesan berdasarkan panjang nomor IBAN. 2 karakter pertama dari setiap angka adalah kode negara. Semua karakter lain (huruf kecil pada pastebin, tetapi dapat berupa kasus apa pun dalam IBAN yang sebenarnya) di belakang 2 pertama dapat berupa karakter alfanumerik apa pun.
- Pindahkan keempat karakter awal ke akhir string.
- Ganti setiap huruf dalam string dengan dua digit, dengan demikian memperluas string, di mana A = 10, B = 11, ..., Z = 35.
- Menafsirkan string sebagai bilangan bulat desimal dan menghitung sisa angka itu di divisi dengan 97
Jika sisanya adalah 1, tes digit periksa dilewati dan IBAN mungkin valid.
Contoh (Bank Inggris fiktif, kode sortir 12-34-56, nomor rekening 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
Algoritma moest mengembalikan true (atau nilai kebenaran) jika angka tersebut valid, dan false (atau nilai palsu) jika angka tidak valid sesuai dengan algoritma. Anda tidak perlu memeriksa apakah nomor itu benar-benar ada, hanya jika itu valid. Algoritme harus bekerja untuk masing-masing nomor IBAN berbeda yang disetujui yang disebutkan dalam artikel wikipedia di atas. Algoritma harus kompatibel dengan angka baik dengan atau tanpa karakter pemisah antara 2 karakter alfanumerik. Karakter pemisah dapat berupa titik, spasi atau tanda hubung dan satu angka dapat berisi berbagai jenis pemisah.
Lubang biasa berlaku: tidak ada sumber daya eksternal, tidak ada fungsi atau metode bawaan.
Jenis puzzle adalah kode golf. Kode terpendek dalam bytecount menang. Pelat standar yang diperlukan untuk menjalankan program (mis. Namespace, kelas, deklarasi fungsi dalam OOP) tidak termasuk dalam bytecount.
Bonus: jika Anda dapat mengembalikan nomor IBAN yang diformat dengan benar (sesuai dengan format nasional di wikipedia) alih-alih dalam kasus nomor yang valid, Anda mendapatkan pengurangan 25% dalam skor Anda. Jika nomor tidak valid, Anda mengembalikan string literal dengan nilai "Tidak Valid".
Salinan panjang IBAN dalam hal pastebin pernah dihapus:
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