blob: 6fd125ad83d3bb9c196ce5642007376a85c62597 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/bin/bash
while [[ $1 ]]
do
[[ ${#1} -eq 13 ]] || [[ ${#1} -eq 12 ]] || {
printf >&2 'length is %d, should be 13\n' ${#1}
exit 1
}
declare -i checksum=0
declare -i factor=1
for i in {0..11}
do
v=${1:i:1}
checksum=$((checksum+factor*v))
factor=$((factor^2))
#printf >&2 'v: %s : cs=%d f=%d\n' "$v" $checksum $factor
done
if [[ ${#1} -eq 12 ]]
then echo "$1"$((10-checksum%10))
else [[ $((10-checksum%10)) -eq ${1:12} ]] || exit
fi
shift
done
|