Análisis de $label: '$sku'";
echo "
";
echo "- Longitud: " . strlen($sku) . "
";
echo "- HEX: " . get_hex($sku) . "
";
echo "- Caracteres invisibles/especiales: ";
$has_special = false;
for ($i = 0; $i < strlen($sku); $i++) {
$ord = ord($sku[$i]);
if ($ord < 32 || $ord > 126) {
echo "[ORD $ord en pos $i] ";
$has_special = true;
}
}
if (!$has_special) echo "Ninguno detectado (ASCII estándar)";
echo "
";
echo "
";
}
$skus_to_test = ['AFS-0465', 'AFS-0466', 'AFS-0467'];
echo "Diagnóstico de SKU AFS-0466 (NUEVA LÓGICA AUTO)
";
foreach ($skus_to_test as $s) {
analyze_sku($s, "Literal en código");
}
// Simular generación de Barcode con la nueva lógica
$generator = new BarcodeGenerator();
echo "Simulación de Generación CODE128 AUTO
";
foreach ($skus_to_test as $s) {
echo "Generando para: $s
";
// Usar reflexión para acceder a getBarcodeData si fuera necesario,
// pero como ya actualizamos el archivo, podemos simplemente ver el resultado visual o recrear la lógica aquí para confirmar.
$code = strtoupper(trim($s));
$len = strlen($code);
$indices = [];
$currentSet = '';
if (ctype_digit(substr($code, 0, 2))) {
$indices[] = 105; // Start C
$currentSet = 'C';
} else {
$indices[] = 104; // Start B
$currentSet = 'B';
}
$i = 0;
while ($i < $len) {
if ($currentSet == 'B') {
if ($i + 1 < $len && ctype_digit($code[$i]) && ctype_digit($code[$i+1])) {
$indices[] = 99; // Switch to C
$currentSet = 'C';
continue;
}
$indices[] = ord($code[$i]) - 32; // Simplificado para B
$i++;
} else {
if (!($i + 1 < $len && ctype_digit($code[$i]) && ctype_digit($code[$i+1]))) {
$indices[] = 100; // Switch to B
$currentSet = 'B';
continue;
}
$indices[] = (int)substr($code, $i, 2);
$i += 2;
}
}
$sum = $indices[0];
for ($k = 1; $k < count($indices); $k++) {
$sum += ($indices[$k] * $k);
}
$checksum = $sum % 103;
$indices[] = $checksum;
$indices[] = 106; // Stop
echo "Índices CODE128 AUTO: " . implode(', ', $indices) . "
";
echo "Checksum: $checksum
";
echo "
";
}
?>