티스토리 뷰

<?
/*
여기서 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' 카테고리의 다른 글

php-소켓클래스(데모)  (0) 2008.06.22
php 소켓 클래스(설명)  (0) 2008.06.22
금액(문자) -> 숫자로 변환 함수  (0) 2008.06.22
PHP RSS Reader [RSS 2.0]  (0) 2008.06.17
php의 oop 지원형태  (0) 2008.06.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크