사이트 내 전체검색
PHP
[php] 폰트없이 바코드출력
로빈아빠
https://cmd.kr/php/427 URL이 복사되었습니다.

본문

폰트없이 바코드출력

출처는 PHP스쿨입니다.
<? 

/* 
여기서 ean-13, ean-8, upc-a코드는 맨끝자리 체크비트는 
입력을 안한다.... upc-e코드는 체크비트까지 입력을 해야 
나오니 이점 참고바람 

ean-13 코드 : 바디소프트 8801008010099 
ean-8 : 담배와 같은 코드 88006611 
upc-a : 016000264595 
upc-e : 스니커즈 04010702 

# 이미지로 저장될때는 바코드의 값을 이름으로 가진다. 
이거 해결하느라고 일주일동안 죽는줄 알았어용 ^^; 

마지막으로 .... upc-e 코드의 체크비트 계산법을 아시는 분은 리플좀 달아주세요 ㅡㅡ; 
다른코드는 해결했는데 이코드가 문제네용 

*/ 
    // Check validity of $code 

    /**************************** 
    *      EAN-13 Code (13자리) * 
    ****************************/ 
    function Code_Ean13($code) { 
     
       header ("Content-type: image/jpeg"); 
       $IMG_ROOT = "/images/"; 
     
       if (strlen($code) != 12) { 
          $im = @ImageCreate (304, 100) or die ("Cannot Initialize new GD image stream"); 
          $bg = ImageColorAllocate ($im, 255, 255, 255); 
          $fg = ImageColorAllocate ($im, 0, 0, 0); 
          ImageString ($im, 5, 3, 10, "Code $code is not valid", $fg); 
          ImageString ($im, 5, 3, 30, "12 digits?", $fg); 
          ImagePng ($im); 
          break; 
       } 
     
     
       for ($i = 1; $i <= 12; $i++) { 
           if ((substr($code, $i-1, 1) <= 0) && ((substr($code, $i-1, 1) >= 9))) { 
              $im = @ImageCreate (304, 100) or die ("Cannot Initialize new GD image stream"); 
              $bg = ImageColorAllocate ($im, 255, 255, 255); 
              $fg = ImageColorAllocate ($im, 0, 0, 0); 
              ImageString ($im, 5, 3, 10, "Code $code is not valid", $fg); 
              ImageString ($im, 5, 3, 30, "only digits!", $fg); 
              ImagePng ($im); 
              break;               
           } 
       } 
     
     
       // Define bitcode for Numbers 
       $left[0][O] = "0001101"; 
       $left[0][E] = "0100111"; 
       $left[1][O] = "0011001"; 
       $left[1][E] = "0110011"; 
       $left[2][O] = "0010011"; 
       $left[2][E] = "0011011"; 
       $left[3][O] = "0111101"; 
       $left[3][E] = "0100001"; 
       $left[4][O] = "0100011"; 
       $left[4][E] = "0011101"; 
       $left[5][O] = "0110001"; 
       $left[5][E] = "0111001"; 
       $left[6][O] = "0101111"; 
       $left[6][E] = "0000101"; 
       $left[7][O] = "0111011"; 
       $left[7][E] = "0010001"; 
       $left[8][O] = "0110111"; 
       $left[8][E] = "0001001"; 
       $left[9][O] = "0001011"; 
       $left[9][E] = "0010111"; 
       $right[0] = "1110010"; 
       $right[1] = "1100110"; 
       $right[2] = "1101100"; 
       $right[3] = "1000010"; 
       $right[4] = "1011100"; 
       $right[5] = "1001110"; 
       $right[6] = "1010000"; 
       $right[7] = "1000100"; 
       $right[8] = "1001000"; 
       $right[9] = "1110100"; 
     
     
       // Calculate Checksum 
       $oddeven = 1; 
     
       for ($i = 1; $i <= 12; $i++) { 
           $num = substr($code, $i-1, 1); 
           if ($oddeven == 1) { 
              $intsum = $num * $oddeven; 
              $extsum = $extsum + $intsum; 
             $oddeven = 3; 
           } else { 
               $intsum = $num * $oddeven; 
                $extsum = $extsum + $intsum; 
               $oddeven = 1; 
           } 
       } 
     
       $check = (floor($extsum/10)*10+10) - $extsum; 
     
       if ($check == 10) { 
          $check = 0; 
       } 
     
       $code = $code . $check; 
     
       // Build Array from $code string 
     
       for ($i = 1; $i <= 13; $i++) { 
           $c[$i] = substr($code, $i-1, 1); 
       } 
     
     
       // Set parity 
       switch( $c[1] ) { 
          case 0: 
               $parity = "OOOOO"; 
               break; 
          case 1: 
               $parity = "OEOEE"; 
               break; 
          case 2: 
               $parity = "OEEOE"; 
               break; 
          case 3: 
               $parity = "OEEEO"; 
               break; 
          case 4: 
               $parity = "EOOEE"; 
               break; 
          case 5: 
               $parity = "EEOOEE"; 
               break; 
          case 6: 
               $parity = "EEEOO"; 
               break; 
          case 7: 
               $parity = "EOEOE"; 
               break; 
          case 8: 
               $parity = "EOEEO"; 
               break; 
          case 9: 
               $parity = "EEOEO"; 
               break; 
       } 
     
       // Start generating bitcode for barcode 
       $barbit = "101"; // Startguard 
     
       $barbit = $barbit . $left[$c[2]][O]; // 2nd char is always odd 
     
       for ($i = 3; $i <= 7; $i++) {    // generate first 5 digits with parity in bitcode 
           $par = substr($parity, $i - 3, 1); 
           $barbit = $barbit . $left[$c[$i]][$par]; 
       } 
     
       $barbit = $barbit . "01010"; // Middleguard 
     
       for ($i = 8; $i <= 13; $i++) {     // generate bitcode for 5 digits and 1 checksum 
           $barbit = $barbit . $right[$c[$i]]; 
       } 
     
       $barbit = $barbit . "101"; // Endguard 
     
       // Create Image 
       $im = @ImageCreate (304, 100) or die ("Cannot Initialize new GD image stream"); 
       $bg = ImageColorAllocate ($im, 255, 255, 255); 
       $fg = ImageColorAllocate ($im, 0, 0, 0); 
     
       $start = 14; 
     
       for ($i = 1; $i <= 95; $i++) { 
           $end = $start + 3; 
           $bit = substr($barbit, $i-1, 1); 
     
           if ($bit == 0) { 
             Imagefilledrectangle ($im, $start, 0, $end, 100, $bg); 
           } else { 
               Imagefilledrectangle ($im, $start, 0, $end, 100, $fg); 
           } 
           $start = $end; 
       } 
     
       Imagefilledrectangle ($im, 299, 0, 304, 100, $bg); 
       Imagefilledrectangle ($im, 23, 80, 148, 100, $bg); 
       Imagefilledrectangle ($im, 163, 80, 289, 100, $bg); 
       Imagefilledrectangle ($im, 0, 92, 304, 100, $bg); 
       ImageString ($im, 5, 3, 83, $c[1], $fg); 
       ImageString ($im, 5, 37, 83, "$c[2] $c[3] $c[4] $c[5] $c[6] $c[7]", $fg); 
       ImageString ($im, 5, 177, 83, "$c[8] $c[9] $c[10] $c[11] $c[12] $c[13]", $fg); 
       ImageJpeg($im, $code.".jpg"); 
       copy($code.".jpg", $IMG_ROOT.$code.".jpg"); 
       unlink($code.".jpg"); 
    } 
     
     

    /**************************** 
    *      EAN-8 Code  (8자리)  * 
    ****************************/ 
    function Code_Ean8($code) { 
     
       header ("Content-type: image/jpeg"); 
       $IMG_ROOT = "/images/"; 
     
       $intsum = 0; 
       $extsum = 0; 
       $oddeven = 3; 
     
       for ($i = 1; $i <= 7; $i++) { 
           $num = substr($code, $i-1, 1); 
     
           if ($oddeven == 1) { 
               $intsum = $num * $oddeven; 
             $extsum = $extsum + $intsum; 
             $oddeven = 3; 
           } else { 
               $intsum = $num * $oddeven; 
               $extsum = $extsum + $intsum; 
               $oddeven = 1; 
           } 
       } 
     
       $check = (floor($extsum/10)*10+10) - $extsum; 
     
       if ($check == 10) { 
          $check = 0; 
       } 
     
       $code = $code . $check; 
     
       for ($i = 1; $i <= 8; $i++) { 
           $c[$i] = substr($code, $i-1, 1); 
       } 
     
       $barbit = "101"; //START 
     
       $left[0][O] = "0001101"; 
       $left[1][O] = "0011001"; 
       $left[2][O] = "0010011"; 
       $left[3][O] = "0111101"; 
       $left[4][O] = "0100011"; 
       $left[5][O] = "0110001"; 
       $left[6][O] = "0101111"; 
       $left[7][O] = "0111011"; 
       $left[8][O] = "0110111"; 
       $left[9][O] = "0001011"; 
       $right[0] = "1110010"; 
       $right[1] = "1100110"; 
       $right[2] = "1101100"; 
       $right[3] = "1000010"; 
       $right[4] = "1011100"; 
       $right[5] = "1001110"; 
       $right[6] = "1010000"; 
       $right[7] = "1000100"; 
       $right[8] = "1001000"; 
       $right[9] = "1110100"; 
     
       for ($i = 1; $i <= 4; $i++) {      // 5 Digits 
           $num = substr($code, $i - 1, 1); 
           $barbit = $barbit . $left[$num][O]; 
       } 
     
       $barbit = $barbit . "01010"; //Mittelteil 
     
       for ($i = 5; $i <= 8; $i++) {      // 6 Digits 
           $num = substr($code, $i - 1, 1); 
           $barbit = $barbit . $right[$num]; 
       } 
     
       $barbit = $barbit . "101"; 
     
       $im = @ImageCreate (211, 100) or die ("Cannot Initialize new GD image stream"); 
       $bg = ImageColorAllocate ($im, 255, 255, 255); 
       $fg = ImageColorAllocate ($im, 0, 0, 0); 
     
       $start = 5; 
     
       for ($i = 1; $i <= 95; $i++) { 
           $end = $start + 3; 
           $bit = substr($barbit, $i-1, 1); 
     
           if ($bit == 0) { 
             Imagefilledrectangle ($im, $start, 0, $end, 100, $bg); 
           } else { 
               Imagefilledrectangle ($im, $start, 0, $end, 100, $fg); 
           } 
           $start = $end; 
       } 
     
       Imagefilledrectangle ($im, 206, 0, 211, 100, $bg); 
       Imagefilledrectangle ($im, 14, 80, 98, 100, $bg); 
       Imagefilledrectangle ($im, 113, 80, 196, 100, $bg); 
       Imagefilledrectangle ($im, 0, 92, 211, 100, $bg); 
       ImageString ($im, 5, 25, 83, "$c[1] $c[2] $c[3] $c[4]", $fg); 
       ImageString ($im, 5, 124, 83, "$c[5] $c[6] $c[7] $c[8]", $fg); 
       ImageJpeg($im, $code.".jpg"); 
       copy($code.".jpg", $IMG_ROOT.$code.".jpg"); 
       unlink($code.".jpg"); 
    } 
     
     
     
    /**************************** 
    *      UPC-A Code (12자리)  * 
    ****************************/ 
    function Code_Upc_a($code) { 
       header ("Content-type: image/jpeg"); 
       $IMG_ROOT = "/images/"; 

       $save_code = $code; 
       $code = "0" . $code; 
       $intsum = 0; 
       $extsum = 0; 
       $oddeven = 1; 
     
       for ($i = 1; $i <= 12; $i++) { 
           $num = substr($code, $i-1, 1); 
     
           if ($oddeven == 1) { 
                    $intsum = $num * $oddeven; 
                 $extsum = $extsum + $intsum; 
                 $oddeven = 3; 
           } else { 
                   $intsum = $num * $oddeven; 
                   $extsum = $extsum + $intsum; 
                   $oddeven = 1; 
           } 
       } 
     
       $check = (floor($extsum/10)*10+10) - $extsum; 
     
       if ($check == 10) { 
          $check = 0; 
       } 
     
       $code = $code . $check; 
       $save_code = $save_code . $check; 
     
       for ($i = 1; $i <= 13; $i++) { 
           $c[$i] = substr($code, $i-1, 1); 
       } 
     
       $num = substr($code, 0, 1); 
     
       // Set parity 
       switch( $num ) { 
          case 0: 
               $parity = "OOOOO"; 
               break; 
          case 1: 
               $parity = "OEOEE"; 
               break; 
          case 2: 
               $parity = "OEEOE"; 
               break; 
          case 3: 
               $parity = "OEEEO"; 
               break; 
          case 4: 
               $parity = "EOOEE"; 
               break; 
          case 5: 
               $parity = "EEOOEE"; 
               break; 
          case 6: 
               $parity = "EEEOO"; 
               break; 
          case 7: 
               $parity = "EOEOE"; 
               break; 
          case 8: 
               $parity = "EOEEO"; 
               break; 
          case 9: 
               $parity = "EEOEO"; 
               break; 
       } 
     
     
       $barbit = "101"; //START 
     
       $left[0][O] = "0001101"; 
       $left[0][E] = "0100111"; 
       $left[1][O] = "0011001"; 
       $left[1][E] = "0110011"; 
       $left[2][O] = "0010011"; 
       $left[2][E] = "0011011"; 
       $left[3][O] = "0111101"; 
       $left[3][E] = "0100001"; 
       $left[4][O] = "0100011"; 
       $left[4][E] = "0011101"; 
       $left[5][O] = "0110001"; 
       $left[5][E] = "0111001"; 
       $left[6][O] = "0101111"; 
       $left[6][E] = "0000101"; 
       $left[7][O] = "0111011"; 
       $left[7][E] = "0010001"; 
       $left[8][O] = "0110111"; 
       $left[8][E] = "0001001"; 
       $left[9][O] = "0001011"; 
       $left[9][E] = "0010111"; 
       $right[0]   = "1110010"; 
       $right[1]   = "1100110"; 
       $right[2]   = "1101100"; 
       $right[3]   = "1000010"; 
       $right[4]   = "1011100"; 
       $right[5]   = "1001110"; 
       $right[6]   = "1010000"; 
       $right[7]   = "1000100"; 
       $right[8]   = "1001000"; 
       $right[9]   = "1110100"; 
     
       $num = substr($code, 1, 1); //Ziffer 2 
       $barbit = $barbit . $left[$num][O]; 
     
       for ($i = 3; $i <= 7; $i++) {        // 5 Digits 
           $num = substr($code, $i - 1, 1); 
           $par = substr($parity, $i - 3, 1); 
           $barbit = $barbit . $left[$num][$par]; 
       } 
     
       $barbit = $barbit . "01010"; //Mittelteil 
     
       for ($i = 8; $i <= 13; $i++) {       // 6 Digits 
           $num = substr($code, $i - 1, 1); 
           $barbit = $barbit . $right[$num]; 
       } 
     
       $barbit = $barbit . "101"; 
     
       $im = @ImageCreate (313, 100) or die ("Cannot Initialize new GD image stream"); 
       $bg = ImageColorAllocate ($im, 255, 255, 255); 
       $fg = ImageColorAllocate ($im, 0, 0, 0); 
     
       $start = 14; 
     
       for ($i = 1; $i <= 95; $i++) { 
           $end = $start + 3; 
           $bit = substr($barbit, $i-1, 1); 
     
           if ($bit == 0) { 
                   Imagefilledrectangle ($im, $start, 0, $end, 100, $bg); 
           } else { 
                   Imagefilledrectangle ($im, $start, 0, $end, 100, $fg); 
           } 
           $start = $end; 
       } 
     
       Imagefilledrectangle ($im, 299, 0, 313, 100, $bg); 
       Imagefilledrectangle ($im, 44, 80, 148, 100, $bg); 
       Imagefilledrectangle ($im, 163, 80, 267, 100, $bg); 
       Imagefilledrectangle ($im, 0, 92, 313, 100, $bg); 
       ImageString ($im, 5, 3, 83, $c[2], $fg); 
       ImageString ($im, 5, 56, 83, "$c[3] $c[4] $c[5] $c[6] $c[7]", $fg); 
       ImageString ($im, 5, 175, 83, "$c[8] $c[9] $c[10] $c[11] $c[12]", $fg); 
       ImageString ($im, 5, 302, 83, $c[13], $fg); 
       ImageJpeg($im, $save_code.".jpg"); 
       copy($save_code.".jpg", $IMG_ROOT.$save_code.".jpg"); 
       unlink($save_code.".jpg"); 
     
    } 
     


    /**************************** 
    *      UPC-E Code (8자리)   * 
    ****************************/ 
    function Code_Upc_e($code) { 
       header ("Content-type: image/jpeg"); 
       $IMG_ROOT = "/images/"; 

       $save_code = $code; 
       $code = $code; 
       $intsum = 0; 
       $extsum = 0; 
       $oddeven = 1; 
     

       //인쇄할 바코드... 
       for ($i = 1; $i <= 9; $i++) { 
           $c[$i] = substr($code, $i-1, 1); 
       } 
     
       $code_len = strlen($code) - 1; 
       $num = substr($code, $code_len, 1); 

       // Set parity 
       switch( $num ) { 
          case 0: 
               $parity = "EEEOOO"; 
               break; 
          case 1: 
               $parity = "EEOEOO"; 
               break; 
          case 2: 
               $parity = "EEOOEO"; 
               break; 
          case 3: 
               $parity = "EEOOOE"; 
               break; 
          case 4: 
               $parity = "EOEEOO"; 
               break; 
          case 5: 
               $parity = "EOOEEO"; 
               break; 
          case 6: 
               $parity = "EOOOEE"; 
               break; 
          case 7: 
               $parity = "EOEOEO"; 
               break; 
          case 8: 
               $parity = "EOEOOE"; 
               break; 
          case 9: 
               $parity = "EOOEOE"; 
               break; 
       } 
     

       $barbit = "101"; //CODE START 
     

       $left[0][O] = "0001101"; 
       $left[0][E] = "0100111"; 
       $left[1][O] = "0011001"; 
       $left[1][E] = "0110011"; 
       $left[2][O] = "0010011"; 
       $left[2][E] = "0011011"; 
       $left[3][O] = "0111101"; 
       $left[3][E] = "0100001"; 
       $left[4][O] = "0100011"; 
       $left[4][E] = "0011101"; 
       $left[5][O] = "0110001"; 
       $left[5][E] = "0111001"; 
       $left[6][O] = "0101111"; 
       $left[6][E] = "0000101"; 
       $left[7][O] = "0111011"; 
       $left[7][E] = "0010001"; 
       $left[8][O] = "0110111"; 
       $left[8][E] = "0001001"; 
       $left[9][O] = "0001010"; 
       $left[9][E] = "0010111"; 
     
       for ($i = 2; $i <= 7; $i++) {        // 6 Digits 
           $num = substr($code, $i - 1, 1); 
           $par = substr($parity, $i - 2, 1); 
           $barbit = $barbit . $left[$num][$par]; 
       } 


       $barbit = $barbit . "010101"; //Mittelteil 

       $im = @ImageCreate (176, 100) or die ("Cannot Initialize new GD image stream"); 
       $bg = ImageColorAllocate ($im, 255, 255, 255); 
       $fg = ImageColorAllocate ($im, 0, 0, 0); 
     
       $start = 10; 
     
       for ($i = 1; $i <= 95; $i++) { 
           $end = $start + 3; 
           $bit = substr($barbit, $i-1, 1); 
     
           if ($bit == 0) { 
                   Imagefilledrectangle ($im, $start, 0, $end, 100, $bg); 
           } else { 
                   Imagefilledrectangle ($im, $start, 0, $end, 100, $fg); 
           } 
           $start = $end; 
       } 
       
       //이미지를 생성( jpg )  지정한 $IMG_ROOT폴더로 복사 후 현디렉토리에 생성된 이미지를 삭제한다. 
       Imagefilledrectangle ($im, 166, 0, 176, 100, $bg); 
       Imagefilledrectangle ($im, 24, 80, 152, 100, $bg); 
       Imagefilledrectangle ($im, 0, 92, 176, 100, $bg); 
       ImageString ($im, 5, 0, 83, $c[1], $fg); 
       ImageString ($im, 5, 30, 83, "$c[2] $c[3] $c[4] $c[5] $c[6] $c[7]", $fg); 
       ImageString ($im, 5, 166, 83, "$c[8]", $fg); 
       ImageJpeg($im, $save_code.".jpg");         
       copy($save_code.".jpg", $IMG_ROOT.$save_code.".jpg");   
       unlink($save_code.".jpg");     
    } 
     
?>

댓글목록

등록된 댓글이 없습니다.

PHP
871 (11/18P)

Search

Copyright © Cmd 명령어 3.145.63.148