Если честно, не осилил, что я там такое написал в первом сообщении. Воспользовался следующим алгоритмом расчета EAN13 (на примере для кода 215000000001Х)
Цитата: 1. Снала сложим все цифры, стоящие на четных местах: 1+0+0+0+0+0+1=2
2. Полученную сумму умножим на три: 2х3=6
3. Далее сложим цифры, стоящие на нечетных местах:2+5+0+0+0+0=7
4. Затем сложим полученны цифры в пункта 2 и 3: 6+7=13
5. Отбрасывам десятки, получим 3
6. Наконец, из 10 вычетаем число из п.5 и получаем контрольную сумму: 10-3=7
вот скрипт расчета контрольной суммы EAN13 на BASH
Код:
#!/bin/bash
ean=$1
even=0
odd=0
for (( num=0; num<13; num+=2 )); do
odd=$(( ${ean:num:1} + $odd))
even=$(( ${ean:$((num+1)):1} +$even))
done
sum=$(( $(( $even * 3 )) + $odd ))
sum=${sum:$((${#sum}-1)):1}
sum=$(( 10 - $sum ))
sum=${sum:$((${#sum}-1)):1}
echo "$ean$sum"
добавил только условие, что если контролька 10, то 0