Is there a way to read Code32 (Italian Pharmacode) by using Ml Kit?
I was trying to convert the Code39 to Code32 but the reader returns completly different barcode from the read one, like by reading a Code32 like "A042028050" it returns a Code39 with value: "182M0L".
What i have tried is to transform the Code39 to Code32 but the transformation obviously fails:
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
if (barcode.format == Barcode.FORMAT_CODE_39) {
val code32Value = transformToCode32(barcode.rawValue)
if (code32Value != null) {
Toast.makeText(
context,
"Italian Pharmaceutical Barcode (CODE 32): $code32Value",
Toast.LENGTH_SHORT
).show()
}
}
// ...
}
fun transformToCode32(code39Value: String): String? {
// Verify that the value is in the expected format for Italian pharmaceutical barcodes
if (code39Value.length == 9 && code39Value[0] == 'A' && code39Value.substring(1).all { it.isDigit() }) {
// Extract the 8 digits following the 'A' character
val digits = code39Value.substring(1)
// Calculate the check digit (if needed)
// This will depend on the specific algorithm used for CODE 32
// Here's an example algorithm that sums the digits and takes the remainder modulo 10
val checkDigit = digits.map { it.toString().toInt() }.sum() % 10
// Construct the CODE 32 value by combining the digits and check digit
return digits + checkDigit.toString()
}
// Return null if the value does not match the expected format
return null
}