Я создал штрих-код pdf417, используя библиотеку Python pdf417gen.
Штрих-код представлял собой графическое представление строки «M1LONG».Штрих-код имеет два столбца данных, и уровень безопасности исправления ошибок Рида-Соломона установлен на «1».Это указывает на то, что при вводе восьми кодовых слов данных число кодовых слов с исправлением ошибок должно равняться четырем.
Выходные данные Python отображают кодовые слова данных от D07 до D00 как {8, 389, 902, 11, 900, 344, 396, 900}
.Питон перечисляет кодовые слова исправления ошибок от C03 до C00 как {718, 801, 313, 877}
.Вот Python, который использовался для генерации всех кодовых слов:
from builtins import range
from .data import ERROR_CORRECTION_FACTORS
def compute_error_correction_code_words(data_words, level):
assert 0 <= level <= 8
# Correction factors for the given level
factors = ERROR_CORRECTION_FACTORS[level]
# Number of EC words
count = 2 ** (level + 1)
# Correction code words list, prepopulated with zeros
ec_words = [0] * count
# Do the math
for data_word in data_words:
temp = (data_word + ec_words[-1]) % 929
for x in range(count - 1, -1, -1):
word = ec_words[x - 1] if x > 0 else 0
ec_words[x] = (word + 929 - (temp * factors[x]) % 929) % 929
return [929 - x if x > 0 else x for x in reversed(ec_words)]
Кодовые слова для исправления ошибок генерируются с использованием полиномов, арифметики поля Галуа и дополнений к модулю 929, который является числом возможных кодовых слов для pdf417.система.В расчетах используется ряд факторов для упрощения процесса.Для уровня безопасности 1 рекомендуемое количество факторов - четыре.Факторы 522,568,723,809
http://grandzebu.net/informatique/codbar/pdf417coef.txt
Проблема заключается в следующем.Я попытался воссоздать кодовые слова ошибок, используя псевдокод JAVA, полученный из http://grandzebu.net/informatique/codbar-en/pdf417.htm
. Я написал программу JAVA, чтобы попытаться сгенерировать те же кодовые слова, что и программное обеспечение Python, описанное выше, но он не генерируетте же кодовые слова ошибки.
JAVA-программа компилируется и запускается, математика выглядит хорошо для моего неопытного глаза, но полученные коды ошибок не совпадают.Вот мой JAVA, переменные JAVA называются такими же, как Python, чтобы упростить сравнение двух программ.
import java.util.Arrays;
public class reedsolomon{
public static void main (String[] args){
int ec_words[] = new int[4];//correction codewords array
int temp=0;//holding variable
int count=4; //number of error correction codewords
int data_words[] = {8,389,902,11,900,344,396,900};// eight data codewords array D7 to D0.
int factors[]= {522,568,723,809}; //factors or coefficients array.
for(int i=0; i<data_words.length-1; i++) {
temp=(data_words[i] + ec_words[count-1])%929;
for(int x=count-1; x>-1; x--){
if(x==0){
ec_words[x] = (929-(temp*factors[x])%929)%929; //negative values in the Galois Field
//GF(929) are equal to the complement of itself if
//ec_words[x] > -929
}
else{
ec_words[x]=(ec_words[x-1]+929-(temp*factors[x])%929) %929; //negative values in the Galois Field
//GF(929) are equal to the complement of the
//remainder (ec_words[x] /929) if ec_words[x] <= -929.
}
}
}
for(int j=0; j<count; j++){
if(ec_words[j] != 0){
ec_words[j]=929-ec_words[j];
}
}System.out.println("Error codewords are " + Arrays.toString(ec_words));
}
}
Я был бы очень признателен, если узнаю, в чем заключается проблема с кодом JAVA, которыйне позволяет генерировать те же кодовые слова с ошибками, что и программа python, содержащаяся в библиотеке pdf417gen.