Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
34
Task/IBAN/UNIX-Shell/iban.sh
Normal file
34
Task/IBAN/UNIX-Shell/iban.sh
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
declare -A base36=(
|
||||
[A]=10 [B]=11 [C]=12 [D]=13 [E]=14 [F]=15 [G]=16 [H]=17 [I]=18
|
||||
[J]=19 [K]=20 [L]=21 [M]=22 [N]=23 [O]=24 [P]=25 [Q]=26 [R]=27
|
||||
[S]=28 [T]=29 [U]=30 [V]=31 [W]=32 [X]=33 [Y]=34 [Z]=35
|
||||
)
|
||||
|
||||
function is_iban {
|
||||
local -u acct=${1//[^[:alnum:]]/}
|
||||
acct=${acct:4}${acct:0:4}
|
||||
local i char digits=""
|
||||
for ((i=0; i<${#acct}; i++)); do
|
||||
char=${acct:i:1}
|
||||
digits+=${base36[$char]:-$char}
|
||||
done
|
||||
local mod=$(mod97 $digits)
|
||||
(( mod == 1 ))
|
||||
}
|
||||
|
||||
function mod97 {
|
||||
local D=$1
|
||||
N=${D:0:9}
|
||||
D=${D:9}
|
||||
while [[ -n $D ]]; do
|
||||
mod=$(( N % 97 ))
|
||||
N=$(printf "%02d%s" $mod ${D:0:7})
|
||||
D=${D:7}
|
||||
done
|
||||
echo $(( N % 97 ))
|
||||
}
|
||||
|
||||
for test in "GB82 WEST 1234 5698 7654 32" "GB42 WEST 1234 5698 7654 32"; do
|
||||
printf "%s : " "$test"
|
||||
is_iban "$test" && echo yes || echo no
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue