How to resolve the algorithm IBAN step by step in the Fortran programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm IBAN step by step in the Fortran programming language
Table of Contents
Problem Statement
The International Bank Account Number (IBAN) is an internationally agreed means of identifying bank accounts across national borders with a reduced risk of propagating transcription errors. The IBAN consists of up to 34 alphanumeric characters:
The check digits enable a sanity check of the bank account number to confirm its integrity even before submitting a transaction.
Validate the following fictitious IBAN: GB82 WEST 1234 5698 7654 32
Details of the algorithm can be found on the Wikipedia page.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm IBAN step by step in the Fortran programming language
Source code in the fortran programming language
program ibancheck
use ISO_FORTRAN_ENV
implicit none
character(4), dimension(75) :: cc = (/ &
"AD24","AE23","AL28","AT20","AZ28","BA20","BE16","BG22","BH22","BR29", &
"BY28","CH21","CR22","CY28","CZ24","DE22","DK18","DO28","EE20","ES24", &
"FI18","FO18","FR27","GB22","GE22","GI23","GL18","GR27","GT28","HR21", &
"HU28","IE22","IL23","IQ23","IS26","IT27","JO30","KW30","KZ20","LB28", &
"LC32","LI21","LT20","LU20","LV21","MC27","MD24","ME22","MK19","MR27", &
"MT31","MU30","NL18","NO15","PK24","PL28","PS29","PT25","QA29","RO24", &
"RS22","SA24","SC31","SE24","SI19","SK24","SM27","ST25","SV28","TL23", &
"TN24","TR26","UA29","VG24","XK20" /)
character(34), dimension(12) :: ibans = (/ "GB82 WEST 1234 5698 7654 32 ", &
"GB82WEST12345698765432 ", &
"gb82 west 1234 5698 7654 32 ", &
"GB82 TEST 1234 5698 7654 32 ", &
"GR16 0110 1250 0000 0001 2300 695 ", &
"GB29 NWBK 6016 1331 9268 19 ", &
"SA03 8000 0000 6080 1016 7519 ", &
"CH93 0076 2011 6238 5295 7 ", &
"IL62 0108 0000 0009 9999 999 ", &
"IL62-0108-0000-0009-9999-999 ", &
"US12 3456 7890 0987 6543 210 ", &
"GR16 0110 1250 0000 0001 2300 695X" /)
integer :: i
do i=1, size(ibans)
if (checkIBAN(trim(ibans(i)))) then
print *, " valid IBAN: ", trim(ibans(i))
else
print *, "invalid IBAN: ", trim(ibans(i))
end if
end do
return
contains
function checkIBAN(ibancode) result(valid)
character(len=*), intent(in) :: ibancode
character(len=len(ibancode)) :: iban
logical :: valid
integer(int32) :: j, ascii, ibanSize
character(100) :: ibanRearrange, ibantoint
character(2) :: temp
valid = .false.
iban = remove_blanks(ibancode)
ibanSize = checkCountryCode(iban)
if (ibanSize == len(trim(iban))) then
ibanRearrange = iban(5:ibanSize)//iban(1:4)
ibantoint = ""
do j=1, ibanSize
ascii = ichar(ibanRearrange(j:j))
if ((ascii >= 65) .and. (ascii<=90)) then
write (temp,fmt='(I2)') ascii-55
ibantoint = trim(ibantoint) // temp
else
ibantoint = trim(ibantoint) // ibanRearrange(j:j)
end if
end do
if (mod97(ibantoint) == 1) then
valid = .true.
end if
end if
end function checkIBAN
function mod97(strint) result(res)
character(len=*), intent(in) :: strint
integer :: i, num, res
res = 0
do i=1, len(trim(strint))
read(strint(i:i),*) num
res = mod((res*10 + num),97);
end do
end function mod97
function checkCountryCode(iban) result(ibanlength)
character(len=*), intent(in) :: iban
integer(int16) :: ibanlength, i
ibanlength = 0
do i=1, size(cc)
if (iban(1:2) == cc(i)(1:2)) then
read(cc(i)(3:4),*) ibanlength
exit
end if
end do
end function checkCountryCode
Recursive Function Stripper(string,ch) Result(stripped)
Implicit None
character(len=*), intent(in) :: string
character, intent(in) :: ch
character(:), allocatable :: stripped
IF (LEN(string)==1) THEN
IF (string==ch) THEN
stripped = ''
ELSE
stripped = string
END IF
ELSE
IF (string(1:1)==ch) THEN
stripped = stripper(string(2:),ch)
ELSE
stripped = string(1:1)//stripper(string(2:),ch)
END IF
END IF
END Function stripper
Function Remove_Blanks(string) Result(stripped)
Implicit None
character(len=*), intent(in) :: string
character(:), allocatable :: stripped
stripped = trim(Stripper(trim(Stripper(string,' ')),achar(9)))
END Function Remove_Blanks
end program ibancheck
You may also check:How to resolve the algorithm Read a file line by line step by step in the Racket programming language
You may also check:How to resolve the algorithm Sieve of Eratosthenes step by step in the Agena programming language
You may also check:How to resolve the algorithm Trabb Pardo–Knuth algorithm step by step in the Ela programming language
You may also check:How to resolve the algorithm Substring/Top and tail step by step in the Lua programming language
You may also check:How to resolve the algorithm Shell one-liner step by step in the Lasso programming language