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);
?>
설명
- 패턴 정의: Code 128B 패턴을 정의합니다. 각 문자는 11개의 모듈로 표현됩니다.
- 바코드 문자열 설정: 바코드로 변환할 문자열을 설정합니다.
- 이미지 크기 설정: 바코드 문자열의 길이에 따라 이미지의 너비를 설정합니다.
- 이미지 생성 및 색상 설정: 이미지를 생성하고 흰색과 검은색을 정의합니다.
- 패턴 그리기 함수:
drawPattern
함수를 정의하여 각 패턴을 이미지에 그립니다. - 시작 패턴, 데이터 패턴, 체크섬 패턴, 종료 패턴 그리기: 바코드의 시작, 데이터, 체크섬, 종료 패턴을 차례로 그립니다.
- 이미지 출력: 생성된 바코드 이미지를 PNG 형식으로 출력합니다.
이 코드는 문자열을 Code 128B 형식의 바코드로 변환하여 이미지를 생성합니다.
728x90
반응형
'Software > PHP' 카테고리의 다른 글
PHP 시작하기 - Barcode39 (0) | 2024.08.08 |
---|---|
PHP 소개 (0) | 2024.08.08 |
PHP 시작하기 - curl이용 웹크롤링 (0) | 2024.07.02 |
PHP 시작하기 - header 및 호출시 파라멘트 읽기 (0) | 2024.06.22 |
phpmyadmin에서 SQL 내보내기 euc-kr 추가하기 (0) | 2024.06.21 |