首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 生成 UPC-A 條碼圖片:GD 繪製條碼與人工可讀標籤完整實作

     編輯:PHP 綜合知識

UPC-A 編碼規則

  • 11 位數字 + 1 位檢查碼 = 12 位
  • 左半邊 6 位用 L 編碼(奇校驗),右半邊 6 位用 R 編碼(偶校驗)
  • 起始/中間/結束護衛條:101、01010、101

完整生成函數

<?php
function generateUPCA($code) {
    // 1. 輸入驗證
    if (strlen($code) !== 11 || !ctype_digit($code)) {
        die('UPC-A 必須為 11 位數字');
    }
    
    // 2. 計算檢查碼 (EAN-13 算法)
    $ncode = '0' . $code; // 前補 0 擴充為 EAN-13
    $even = $odd = 0;
    for ($i = 0; $i < 12; $i++) {
        ($i % 2 === 0) ? $even += $ncode[$i] : $odd += $ncode[$i];
    }
    $check = (10 - (($odd * 3 + $even) % 10)) % 10;
    $fullCode = $code . $check; // 12 位完整碼
    
    // 3. 編碼表
    $L = ['0001101','0011001','0010011','0111101','0100011',
          '0110001','0101111','0111011','0110111','0001011'];
    $R = ['1110010','1100110','1101100','1000010','1011100',
          '1001110','1010000','1000100','1001000','1110100'];
    $guard = ['101', '01010', '101']; // 左、中、右
    
    // 4. 組合二進位條碼字串
    $bars = $guard[0]; // 左護衛
    $bars .= $L[$fullCode[0]]; // 第1位用L碼
    for ($i=1; $i<6; $i++) $bars .= $L[$fullCode[$i]]; // 第2-6位
    $bars .= $guard[1]; // 中護衛
    for ($i=6; $i<12; $i++) $bars .= $R[$fullCode[$i]]; // 第7-12位用R碼
    $bars .= $guard[2]; // 右護衛
    
    // 5. GD 繪圖
    $lw = 2; $hi = 100; // 條寬、條高
    $img = imagecreate($lw * 95 + 30, $hi + 30);
    $fg = imagecolorallocate($img, 0, 0, 0);
    $bg = imagecolorallocate($img, 255, 255, 255);
    imagefilledrectangle($img, 0, 0, imagesx($img), imagesy($img), $bg);
    
    // 繪製條碼
    for ($x = 0; $x < strlen($bars); $x++) {
        $sh = (($x < 10) || ($x >= 45 && $x < 50) || ($x >= 85)) ? 10 : 0; // 護衛條下延
        $color = ($bars[$x] === '1') ? $fg : $bg;
        imagefilledrectangle($img, $x*$lw+15, 5, ($x+1)*$lw+14, $hi+5+$sh, $color);
    }
    
    // 繪製人工可讀數字
    imagestring($img, 4, 5, $hi-5, $fullCode[0], $fg); // 首位左側
    for ($i=0; $i<5; $i++) {
        imagestring($img, 5, $lw*(13+$i*6)+15, $hi+5, $fullCode[$i+1], $fg); // 左組
        imagestring($img, 5, $lw*(53+$i*6)+15, $hi+5, $fullCode[$i+6], $fg); // 右組
    }
    imagestring($img, 4, $lw*95+17, $hi-5, $fullCode[11], $fg); // 檢查碼右側
    
    // 6. 輸出
    header('Content-Type: image/png');
    imagepng($img);
    imagedestroy($img);
}

// 使用範例
generateUPCA('12345678901');
?>

應用場景

  • 商品標籤列印
  • 庫存管理系統條碼生成
  • 線上訂單電子憑證
  • 測試掃描槍識別率

擴充建議

  • 支援 EAN-13、Code 128、QR Code 等更多制碼
  • 輸出 SVG 矢量格式(適合列印),使用 barcode-bakery 等成熟庫
  • 批次生成 ZIP 打包下載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved