getModuleAt(8, $col)->isDark() ? '1' : '0'; } echo "Our Format Info: $formatH\n"; // Decode $xorMask = "101010000010010"; $unmasked = ''; for ($i = 0; $i < 15; $i++) { $unmasked .= (int)$formatH[$i] ^ (int)$xorMask[$i]; } $ecBits = substr($unmasked, 0, 2); $maskBits = substr($unmasked, 2, 3); echo "Unmasked: $unmasked\n"; echo "EC Bits: $ecBits\n"; echo "Mask Bits: $maskBits\n"; echo "Our Mask Pattern: " . bindec($maskBits) . "\n\n"; // Python uses mask 0 echo "Python Format Info: 101010000010010 (M, Mask 0)\n"; echo "Python Mask Pattern: 0\n\n"; echo "=== PROBLEM FOUND ===\n"; echo "We're using Mask Pattern " . bindec($maskBits) . ", Python uses Mask Pattern 0!\n"; echo "Different masks = completely different QR codes!\n\n"; echo "Solution: Either\n"; echo "1. Use Mask Pattern 0 specifically\n"; echo "2. Ensure our mask pattern is applied correctly\n";