Viết chương trình (phần thân của hàm là đủ) chấp nhận một chuỗi các ký tự chữ và số và xác nhận nó theo ISO 13616: 2007. Thuật toán để xác thực là (nguồn: bài viết trên wikipedia về IBAN http://en.wikipedia.org/wiki/I quốc_Bank_Account_Number ):
Xác thực IBAN Một IBAN được xác thực bằng cách chuyển đổi nó thành một số nguyên và thực hiện thao tác mod-97 cơ bản (như được mô tả trong ISO 7064) trên nó. Nếu IBAN hợp lệ, phần còn lại bằng 1. Thuật toán xác thực IBAN như sau:
- Kiểm tra xem tổng chiều dài IBAN có đúng theo quốc gia không. Nếu không, IBAN không hợp lệ. Độ dài IBAN chính xác có thể được tìm thấy ở đây: http://pastebin.com/kp4eECVk (cũng có thể được tìm thấy bên dưới), được sắp xếp theo độ dài của số IBAN. 2 ký tự đầu tiên của mỗi số là mã quốc gia. Tất cả các ký tự khác (chữ cái viết thường trên pastebin, nhưng có thể là bất kỳ trường hợp nào trong IBAN thực tế) đằng sau 2 ký tự đầu tiên có thể là bất kỳ ký tự chữ và số nào.
- Di chuyển bốn ký tự ban đầu đến cuối chuỗi.
- Thay thế mỗi chữ cái trong chuỗi bằng hai chữ số, từ đó mở rộng chuỗi, trong đó A = 10, B = 11, ..., Z = 35.
- Giải thích chuỗi dưới dạng một số nguyên thập phân và tính phần còn lại của số đó khi chia cho 97
Nếu phần còn lại là 1, kiểm tra chữ số kiểm tra được thông qua và IBAN có thể hợp lệ.
Ví dụ (ngân hàng Vương quốc Anh hư cấu, mã sắp xếp 12-34-56, số tài khoản 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
Thuật toán moest trả về true (hoặc giá trị trung thực) nếu số đó hợp lệ và sai (hoặc giá trị giả) nếu số đó không hợp lệ theo thuật toán. Bạn không cần kiểm tra xem con số có thực sự tồn tại hay không, chỉ khi nó hợp lệ. Thuật toán phải hoạt động cho từng số IBAN được phê duyệt khác nhau được đề cập trong bài viết trên wikipedia ở trên. Thuật toán phải tương thích với các số cả có hoặc không có ký tự phân cách giữa 2 ký tự chữ và số. Ký tự dấu phân cách có thể là dấu chấm, dấu cách hoặc dấu gạch ngang và một số có thể chứa các loại dấu phân cách khác nhau.
Các lỗ hổng thông thường được áp dụng: không có tài nguyên bên ngoài, không có chức năng hoặc phương thức tích hợp.
Loại câu đố là mã golf. Mã ngắn nhất trong chiến thắng bytecount. Bản tóm tắt chuẩn cần thiết để thực thi chương trình (ví dụ: không gian tên, lớp, khai báo hàm trong OOP) không được bao gồm trong bytecount.
Phần thưởng: nếu bạn có thể trả về số IBAN được định dạng chính xác (theo định dạng quốc gia trên wikipedia) thay vì đúng trong trường hợp số hợp lệ, bạn sẽ được giảm 25% số điểm của mình. Nếu số không hợp lệ, bạn trả về một chuỗi ký tự có giá trị "Không hợp lệ".
Bản sao độ dài IBAN trong trường hợp pastebin bị xóa:
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