728x90

바코드 128은 고밀도 바코드로, ASCII 문자 전체를 인코딩할 수 있습니다.

바코드 128 생성 예제

바코드 128은 코드 세트 A, B, C로 나뉘며, 각 세트는 특정 문자 집합을 나타냅니다. 여기서는 코드 세트 B를 사용하여 숫자와 대소문자 알파벳을 인코딩합니다.

먼저, 바코드 128의 각 문자에 대한 패턴을 정의해야 합니다. 바코드 128의 각 패턴은 11개의 모듈(너비)로 구성됩니다.

<?php
// 바코드 128 패턴 정의 (코드 세트 B)
$code128B = array(
    ' ' => '212222', '!' => '222122', '"' => '222221', '#' => '121223',
    '$' => '121322', '%' => '131222', '&' => '122213', '\'' => '122312',
    '(' => '132212', ')' => '221213', '*' => '221312', '+' => '231212',
    ',' => '112232', '-' => '122132', '.' => '122231', '/' => '113222',
    '0' => '123122', '1' => '123221', '2' => '223211', '3' => '221132',
    '4' => '221231', '5' => '213212', '6' => '223112', '7' => '312131',
    '8' => '311222', '9' => '321122', ':' => '321221', ';' => '312212',
    '<' => '322112', '=' => '322211', '>' => '212123', '?' => '212321',
    '@' => '232121', 'A' => '111323', 'B' => '131123', 'C' => '131321',
    'D' => '112313', 'E' => '132113', 'F' => '132311', 'G' => '211313',
    'H' => '231113', 'I' => '231311', 'J' => '112133', 'K' => '112331',
    'L' => '132131', 'M' => '113123', 'N' => '113321', 'O' => '133121',
    'P' => '313121', 'Q' => '211331', 'R' => '231131', 'S' => '213113',
    'T' => '213311', 'U' => '213131', 'V' => '311123', 'W' => '311321',
    'X' => '331121', 'Y' => '312113', 'Z' => '312311', '[' => '332111',
    '\\' => '314111', ']' => '221411', '^' => '431111', '_' => '111224',
    '`' => '111422', 'a' => '121124', 'b' => '121421', 'c' => '141122',
    'd' => '141221', 'e' => '112214', 'f' => '112412', 'g' => '122114',
    'h' => '122411', 'i' => '142112', 'j' => '142211', 'k' => '241211',
    'l' => '221114', 'm' => '413111', 'n' => '241112', 'o' => '134111',
    'p' => '111242', 'q' => '121142', 'r' => '121241', 's' => '114212',
    't' => '124112', 'u' => '124211', 'v' => '411212', 'w' => '421112',
    'x' => '421211', 'y' => '212141', 'z' => '214121', '{' => '412121',
    '|' => '111143', '}' => '111341', '~' => '131141', 'DEL' => '114113',
    'FNC3' => '114311', 'FNC2' => '411113', 'SHIFT' => '411311', 'CODEC' => '113141',
    'FNC4' => '114131', 'FNC1' => '311141', 'StartA' => '211412', 'StartB' => '211214',
    'StartC' => '211232', 'Stop' => '2331112'
);

// 바코드로 변환할 문자열
$barcodeString = 'HELLO123';

// 이미지 크기 설정
$width = 10 + (strlen($barcodeString) + 2) * 11 * 2; // 시작/종료 문자 포함, 각 문자당 11 모듈, 2배 확대
$height = 60;

// 이미지 생성
$image = imagecreate($width, $height);

// 색상 설정
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

// 배경 흰색으로 채우기
imagefill($image, 0, 0, $white);

// 시작 코드 B 패턴
$startPattern = $code128B['StartB'];
$stopPattern = $code128B['Stop'];

// 바코드 그리기
function drawPattern($image, $pattern, &$x, $black, $white) {
    foreach (str_split($pattern) as $i => $module) {
        $color = ($i % 2 == 0) ? $black : $white;
        imagefilledrectangle($image, $x, 10, $x + ($module * 2) - 1, 50, $color);
        $x += $module * 2;
    }
}

// 시작 패턴 그리기
$x = 10; // 시작 x 좌표
drawPattern($image, $startPattern, $x, $black, $white);

// 데이터 패턴 그리기
foreach (str_split($barcodeString) as $char) {
    $pattern = $code128B[$char];
    drawPattern($image, $pattern, $x, $black, $white);
}

// 체크섬 계산 및 그리기
$checksum = 104; // 시작 코드 B의 값
foreach (str_split($barcodeString) as $index => $char) {
    $checksum += (ord($char) - 32) * ($index + 1);
}
$checksum %= 103;
$checksumPattern = array_search(sprintf('%03d', $checksum), $code128B);
drawPattern($image, $code128B[$checksumPattern], $x, $black, $white);

// 종료 패턴 그리기
drawPattern($image, $stopPattern, $x, $black, $white);

// 이미지 출력
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

설명

  1. 패턴 정의: Code 128B 패턴을 정의합니다. 각 문자는 11개의 모듈로 표현됩니다.
  2. 바코드 문자열 설정: 바코드로 변환할 문자열을 설정합니다.
  3. 이미지 크기 설정: 바코드 문자열의 길이에 따라 이미지의 너비를 설정합니다.
  4. 이미지 생성 및 색상 설정: 이미지를 생성하고 흰색과 검은색을 정의합니다.
  5. 패턴 그리기 함수: drawPattern 함수를 정의하여 각 패턴을 이미지에 그립니다.
  6. 시작 패턴, 데이터 패턴, 체크섬 패턴, 종료 패턴 그리기: 바코드의 시작, 데이터, 체크섬, 종료 패턴을 차례로 그립니다.
  7. 이미지 출력: 생성된 바코드 이미지를 PNG 형식으로 출력합니다.

이 코드는 문자열을 Code 128B 형식의 바코드로 변환하여 이미지를 생성합니다.

728x90
반응형

+ Recent posts