Ĺadny brzuch
Witam!
Chcę napisać własną klasę, która będzie generowała kody kreskowe 2D DataMatrix, jednak napotkałem na pewien problem.
Otóż dane przed zapisaniem do kodu muszą zostać zakodowane w algorytmie korekcji błędów Reed-Solomon. Znalazłem jeden algorytm w C++: http://www.eccpage.com/rs.c , jednak nie wiem jak on dokładnie działa i gdzie wprowadzać dane. Byłbym bardzo wdzięczny gdyby ktoś mi pomógł w rozgryzieniu tego algorytmu i ew. napisał listę kroków tej procedury. Więcej o moim problemie tu: http://www.gs1.org/d...al_overview.pdf , strona 69
Z góry bardzo dziękuję za pomoc.
Znalazłem algorytmy Reed-Solomon i napisałem na ich podstawie prostą klasę, która ma generować kody korekcji błędów, ale nie wiem co zrobiłem źle, bo nie działa tak jak powinna...
Dla danych 142, 164, 186
pięć słów kontrolnych powinno być kolejno: 114, 25, 5, 88, 102...
Bardzo proszę WAS o pomoc w tej sprawie
kod klasy:
<? class datamatrix{ public $data_array; public function ReedSolomon($numbercw,$fact_array){ $reed_data=array(); $data_array=$this->data_array; $c=0; $t=0; for($i=0;$i<count($data_array);$i+=1){ $t= ($data_array[$i] xor $reed_data[$numbercw-1]); for($j=$numbercw-1;$j>=0;$j-=1){ if($t=0){ $reed_data[$j]=0; }else{ $reed_data[$j]=$this->Mult($t,$fact_array[$j]) ; } if($j>0) $reed_data[$j]=$reed_data[$j-1] xor $reed_data[$j]; } } return $reed_data; } private function Mult($a,$b){ $log[0]=-255; $alog[0]=1; for($i=1;$i<=255;$i+=1){ $alog[$i]=$alog[$i-1] * 2; if($alog[$i]>=256) $alog[$i] = $alog[$i] xor 301; $log[$alog[$i]]=$i; } $mult=$alog[($log[$a]+$log[$b]) % 255]; return $mult; } } $datamatrix=new datamatrix(); $datamatrix->data_array=array(142,164,186); print_r($datamatrix->ReedSolomon(5,array(228,48,15,111,62))); ?>
Kody czerpię z tej strony: http://www.piotrek94.../datamatrix.htm -> http://grandzebu.net/index.php
Użytkownik piotr94 edytował ten post 09 listopad 2009, 18:58
pytaj na forum.php.pl
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Chcę napisać własną klasę, która będzie generowała kody kreskowe 2D DataMatrix, jednak napotkałem na pewien problem.
Otóż dane przed zapisaniem do kodu muszą zostać zakodowane w algorytmie korekcji błędów Reed-Solomon. Znalazłem jeden algorytm w C++: http://www.eccpage.com/rs.c , jednak nie wiem jak on dokładnie działa i gdzie wprowadzać dane. Byłbym bardzo wdzięczny gdyby ktoś mi pomógł w rozgryzieniu tego algorytmu i ew. napisał listę kroków tej procedury. Więcej o moim problemie tu: http://www.gs1.org/d...al_overview.pdf , strona 69
Z góry bardzo dziękuję za pomoc.
Znalazłem algorytmy Reed-Solomon i napisałem na ich podstawie prostą klasę, która ma generować kody korekcji błędów, ale nie wiem co zrobiłem źle, bo nie działa tak jak powinna...
Dla danych 142, 164, 186
pięć słów kontrolnych powinno być kolejno: 114, 25, 5, 88, 102...
Bardzo proszę WAS o pomoc w tej sprawie
kod klasy:
<? class datamatrix{ public $data_array; public function ReedSolomon($numbercw,$fact_array){ $reed_data=array(); $data_array=$this->data_array; $c=0; $t=0; for($i=0;$i<count($data_array);$i+=1){ $t= ($data_array[$i] xor $reed_data[$numbercw-1]); for($j=$numbercw-1;$j>=0;$j-=1){ if($t=0){ $reed_data[$j]=0; }else{ $reed_data[$j]=$this->Mult($t,$fact_array[$j]) ; } if($j>0) $reed_data[$j]=$reed_data[$j-1] xor $reed_data[$j]; } } return $reed_data; } private function Mult($a,$b){ $log[0]=-255; $alog[0]=1; for($i=1;$i<=255;$i+=1){ $alog[$i]=$alog[$i-1] * 2; if($alog[$i]>=256) $alog[$i] = $alog[$i] xor 301; $log[$alog[$i]]=$i; } $mult=$alog[($log[$a]+$log[$b]) % 255]; return $mult; } } $datamatrix=new datamatrix(); $datamatrix->data_array=array(142,164,186); print_r($datamatrix->ReedSolomon(5,array(228,48,15,111,62))); ?>
Kody czerpię z tej strony: http://www.piotrek94.../datamatrix.htm -> http://grandzebu.net/index.php
Użytkownik piotr94 edytował ten post 09 listopad 2009, 18:58
pytaj na forum.php.pl