Data Matrix条码解析PHP代码修复:无法识别空格后内容
解决Data Matrix条码含空格的解析问题
问题分析
你的Data Matrix条码包含空格分隔的两部分内容,原有代码会因空格截断数据,导致无法解析21开头的序列号字段。条码各字段结构如下:
01:GTIN标识,后接14位数字17:过期日期标识,后接6位数字(格式YYMMDD)10:批次号标识,后接可变长度字符(最多20位)21:序列号标识,后接可变长度字符(最多20位)
修改后的PHP代码
<?php $barcodeData = "0109556135082301172207211060221967 21Sk4YGvF811210721"; // 移除所有空格,确保完整处理整个条码数据 $cleanData = str_replace(' ', '', $barcodeData); $parsed = []; $length = strlen($cleanData); $i = 0; while ($i < $length) { // 获取当前2位标识 $identifier = substr($cleanData, $i, 2); $i += 2; switch ($identifier) { case '01': // GTIN固定14位 $parsed['gtin'] = substr($cleanData, $i, 14); $i += 14; break; case '17': // 过期日期固定6位,转成标准日期格式 $expDate = substr($cleanData, $i, 6); $parsed['expiration_date'] = "20" . substr($expDate, 0, 2) . "-" . substr($expDate, 2, 2) . "-" . substr($expDate, 4, 2); $i += 6; break; case '10': // 批次号为可变长度,直到下一个标识出现 $batchEnd = strpos($cleanData, '21', $i); $batchEnd = $batchEnd === false ? $length : $batchEnd; $parsed['batch_number'] = substr($cleanData, $i, $batchEnd - $i); $i = $batchEnd; break; case '21': // 序列号到字符串结束 $parsed['serial_number'] = substr($cleanData, $i); $i = $length; break; default: $i = $length; break; } } // 输出解析结果 print_r($parsed); ?>
关键修改说明
- 清除空格:用
str_replace移除条码中的空格,避免代码因空格截断数据,确保完整处理所有内容。 - 动态处理可变字段:针对批次号、序列号这类无固定长度的字段,通过查找下一个标识的位置确定字段长度,避免解析错误。
- 日期格式化:将过期日期从
YYMMDD转成YYYY-MM-DD的标准格式,方便后续使用。
预期输出
运行代码后会得到如下解析结果:
Array ( [gtin] => 09556135082301 [expiration_date] => 2022-07-21 [batch_number] => 60221967 [serial_number] => Sk4YGvF811210721 )
注:你的条码数据中没有生产日期对应的标识(通常为11或13开头),因此解析结果不包含该字段。
内容的提问来源于stack exchange,提问作者devilgg86
相关产品推荐
相关产品推荐

