summaryrefslogtreecommitdiff
path: root/bin/ean13
diff options
context:
space:
mode:
authorDavid Wührer <def@gmx.at>2024-05-18 21:04:34 +0200
committerDavid Wührer <def@gmx.at>2024-05-18 21:04:34 +0200
commit77cfffee6177fb0421fa0fce15d6a1875bde4816 (patch)
tree251428cdd482ea50cfb019dbd3c3bafd79d2fd14 /bin/ean13
parent75b23ce1ff0daab363725a2a5755ea80bbeaa68e (diff)
manuals, sum-down, radix
Diffstat (limited to 'bin/ean13')
-rwxr-xr-xbin/ean1322
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