【发布时间】:2015-05-18 12:48:28
【问题描述】:
我有一个数据库,里面全是用户输入的各种长度的条形码。
如何验证这些条形码值以确定格式是否正确,即长度和校验位?使用php
【问题讨论】:
-
问自己这个问题需要验证什么来判断它是否是正确的条形码?然后尝试进行此验证,如果您遇到困难,请使用您尝试过的代码询问关于 SO 的问题。
标签: php validation barcode
我有一个数据库,里面全是用户输入的各种长度的条形码。
如何验证这些条形码值以确定格式是否正确,即长度和校验位?使用php
【问题讨论】:
标签: php validation barcode
给你:
function isValidBarcode($barcode) {
//checks validity of: GTIN-8, GTIN-12, GTIN-13, GTIN-14, GSIN, SSCC
//see: http://www.gs1.org/how-calculate-check-digit-manually
$barcode = (string) $barcode;
//we accept only digits
if (!preg_match("/^[0-9]+$/", $barcode)) {
return false;
}
//check valid lengths:
$l = strlen($barcode);
if(!in_array($l, [8,12,13,14,17,18]))
return false;
//get check digit
$check = substr($barcode, -1);
$barcode = substr($barcode, 0, -1);
$sum_even = $sum_odd = 0;
$even = true;
while(strlen($barcode)>0) {
$digit = substr($barcode, -1);
if($even)
$sum_even += 3 * $digit;
else
$sum_odd += $digit;
$even = !$even;
$barcode = substr($barcode, 0, -1);
}
$sum = $sum_even + $sum_odd;
$sum_rounded_up = ceil($sum/10) * 10;
return ($check == ($sum_rounded_up - $sum));
}
【讨论】:
$even 应设置为 false,我错了吗?
我在一个项目中使用过PHPBarcodeChecker,看这里:http://www.phpclasses.org/package/8560-PHP-Detect-type-and-check-EAN-and-UPC-barcodes.html
希望对你有帮助!
【讨论】: