diff options
author | David Wührer <def@gmx.at> | 2024-05-18 21:04:34 +0200 |
---|---|---|
committer | David Wührer <def@gmx.at> | 2024-05-18 21:04:34 +0200 |
commit | 77cfffee6177fb0421fa0fce15d6a1875bde4816 (patch) | |
tree | 251428cdd482ea50cfb019dbd3c3bafd79d2fd14 /bin/ean13 | |
parent | 75b23ce1ff0daab363725a2a5755ea80bbeaa68e (diff) |
manuals, sum-down, radix
Diffstat (limited to 'bin/ean13')
-rwxr-xr-x | bin/ean13 | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/bin/ean13 b/bin/ean13 new file mode 100755 index 0000000..6fd125a --- /dev/null +++ b/bin/ean13 @@ -0,0 +1,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 |