IBAN: Difference between revisions
Content added Content deleted
Line 1,947: | Line 1,947: | ||
gb82 west 1234 5698 7654 32 is valid. |
gb82 west 1234 5698 7654 32 is valid. |
||
GB82 TEST 1234 5698 7654 32 is invalid. |
GB82 TEST 1234 5698 7654 32 is invalid. |
||
=={{header|PHP}}== |
|||
<lang php> |
|||
<?php |
|||
function piece_wise($iban_all_digits) { |
|||
$remainder = NULL; |
|||
$slice = 9; |
|||
for ($i=0; $i<strlen($iban_all_digits); $i=$i+$slice) |
|||
{ |
|||
if ($i>0) |
|||
{ |
|||
$slice = 7; |
|||
} |
|||
$part = $remainder . substr($iban_all_digits, $i, $slice); |
|||
//echo "REMAINDER: " . $remainder . "<br>"; |
|||
//echo "PART: $part" . "<br>"; |
|||
$remainder = intval($part) % 97; |
|||
} |
|||
return $remainder; |
|||
} |
|||
$iban = "GB82 WEST 1234 5698 7654 32"; |
|||
//remove space |
|||
$iban = str_replace(' ', '', $iban); |
|||
//echo $iban; echo '<br>'; |
|||
$iban_length = strlen($iban); |
|||
$country_code = substr($iban, 0, 2); |
|||
/* |
|||
IBAN lengths are country specific |
|||
full list available at |
|||
https://en.wikipedia.org/wiki/International_Bank_Account_Number#IBAN_formats_by_country |
|||
*/ |
|||
$lengths = ['GB' => 22]; |
|||
if ($lengths[$country_code] != $iban_length) |
|||
{ |
|||
exit ("IBAN length not valid for $country_code"); |
|||
} |
|||
// 2. move first four characters to the end |
|||
$iban = substr($iban, 4) . substr($iban, 0, 4); |
|||
//3. Replace letters in IBAN with digits |
|||
//(A or a = 10, B or b = 11 ... Z or z=35) |
|||
$iban_arr = str_split($iban, 1); |
|||
$iban_all_digits = ''; |
|||
foreach ($iban_arr as $key=>$value) |
|||
{ |
|||
if (ctype_alpha($value)) |
|||
{ |
|||
$value = ord($value) - 55; |
|||
} |
|||
$iban_all_digits = $iban_all_digits . $value; |
|||
} |
|||
if (piece_wise($iban_all_digits) === 1) |
|||
{ |
|||
echo "VALID IBAN!"; |
|||
} |
|||
else |
|||
{ |
|||
echo "IBAN NOT VALID"; |
|||
} |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |