【问题标题】:How do i validate a barcode number using php如何使用 php 验证条形码编号
【发布时间】:2015-05-18 12:48:28
【问题描述】:

我有一个数据库,里面全是用户输入的各种长度的条形码。

如何验证这些条形码值以确定格式是否正确,即长度和校验位?使用php

【问题讨论】:

  • 问自己这个问题需要验证什么来判断它是否是正确的条形码?然后尝试进行此验证,如果您遇到困难,请使用您尝试过的代码询问关于 SO 的问题。

标签: php validation barcode


【解决方案1】:

给你:

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));
    }

【讨论】:

  • 存在任何获取基于mpdf.github.io/reference/html-control-tags/barcode.html的错字的方法
  • 这对于 GTIN-13 来说似乎是错误的,其中第一个数字不应乘以 3,因此 $even 应设置为 false,我错了吗?
  • @akabaka 不,第一个数字总是在右侧倒数第二个。
【解决方案2】:

我在一个项目中使用过PHPBarcodeChecker,看这里:http://www.phpclasses.org/package/8560-PHP-Detect-type-and-check-EAN-and-UPC-barcodes.html

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2012-07-31
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多