encode($referenceData, $ecCodewords); echo "Generated EC codewords:\n"; echo implode(', ', $ec) . "\n\n"; // Known reference EC codewords from QR code specification // These should be the correct EC codewords for the reference data $referenceEC = [0, 245, 228, 127, 21, 207, 194, 102, 66, 52]; echo "Expected EC codewords (from spec):\n"; echo implode(', ', $referenceEC) . "\n\n"; // Compare $matches = 0; for ($i = 0; $i < min(count($ec), count($referenceEC)); $i++) { if ($ec[$i] === $referenceEC[$i]) { $matches++; } else { echo "❌ EC codeword {$i}: got {$ec[$i]}, expected {$referenceEC[$i]}\n"; } } if ($matches === count($referenceEC)) { echo "✅ All EC codewords match reference!\n"; } else { echo "❌ {$matches}/" . count($referenceEC) . " EC codewords match\n"; } // Verify with decoder require_once __DIR__ . '/test-reed-solomon-decoder.php'; $decoder = new SimpleRSDecoder(); $fullCodeword = array_merge($referenceData, $ec); $syndromes = $decoder->calculateSyndromes($fullCodeword, 10); echo "\nSyndromes (should all be 0):\n"; echo implode(', ', $syndromes) . "\n"; $allZero = true; foreach ($syndromes as $s) { if ($s !== 0) { $allZero = false; break; } } if ($allZero) { echo "\n✅ All syndromes are zero - Reed-Solomon is CORRECT!\n"; } else { echo "\n❌ Syndromes are not all zero - Reed-Solomon is WRONG!\n"; echo "\nThis confirms the Reed-Solomon implementation has a bug.\n"; } // Also test with reference EC codewords echo "\n=== Testing with Reference EC Codewords ===\n"; $fullWithReferenceEC = array_merge($referenceData, $referenceEC); $syndromesRef = $decoder->calculateSyndromes($fullWithReferenceEC, 10); echo "Syndromes with reference EC codewords:\n"; echo implode(', ', $syndromesRef) . "\n"; $allZeroRef = true; foreach ($syndromesRef as $s) { if ($s !== 0) { $allZeroRef = false; break; } } if ($allZeroRef) { echo "\n✅ Reference EC codewords are valid!\n"; echo "This means the reference EC codewords are correct.\n"; echo "Our implementation produces different (incorrect) EC codewords.\n"; } else { echo "\n❌ Even reference EC codewords are invalid!\n"; echo "This means either:\n"; echo " 1. The reference EC codewords are wrong\n"; echo " 2. Our syndrome calculation is wrong\n"; }