summaryrefslogtreecommitdiff
path: root/ean13
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