Forest BB

The digital grapevine of The Forest.
It is currently Fri Dec 19, 2014 3:10 pm

All times are UTC




Post new topic Reply to topic  [ 4 posts ] 
Author Message
PostPosted: Wed Jul 04, 2007 5:02 pm 
Offline
User avatar

Joined: Thu Aug 26, 2004 7:08 pm
Posts: 4981
Location: edinburgh
can we make a barcode for the golden hour book?

anyone?

ryan

_________________
-----
www.ryanvanwinkle.com


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 04, 2007 7:01 pm 
Offline
User avatar

Joined: Wed Mar 29, 2006 11:24 am
Posts: 2633
Give me the ISBN and I'll give you the barcode. I wrote a program which would generate bar codes from 12 digit numbers - 2 DDMMYY birthdays for example.

Barcodes are fascinating. For most products, there is a country code, an organisation code and a product code. Countries can use a range of numbers. Organisations are given a code, and they can allocate their own product codes. The last digit is a checksum to ensure that the code is read correctly. Companies which make lots of products have short organisation codes.

There are 3 different ways to represent each number in the code - A, B and C. A and B are used for the numbers 2 to7. The combination of bars from A and B encodes the first digit, which doesn't have any bars associated with it. The C series is used for the last 6 digits. I can't remember the sum for the last digit, but it is something like the sum of the odd (1st, 3rd etc) numbers multiplied by 3 plus the sum of the even (2nd, 4th etc) modulus 10.

For ISBN numbers, they all start with 978, so that leaves 9 digits for the rest.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 04, 2007 8:35 pm 
Offline
User avatar

Joined: Thu Aug 26, 2004 7:08 pm
Posts: 4981
Location: edinburgh
s-dawg, your new avatar should be a bar code.#
r

_________________
-----
www.ryanvanwinkle.com


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 05, 2007 9:31 am 
Offline
User avatar

Joined: Wed Mar 29, 2006 11:24 am
Posts: 2633
Here is the Fortran program I wrote for generating the barcode. You can compile it with the command
Code:
f77    barcode.f   -o barcode
and run it in a pipeline with some other programs for scaling up the PBM and converting it to PNG format like
Code:
echo "1 2 3 4 5 6 7 8 9 0 1 2" | ./barcode | pnmscale 4 | pnmtopng > barcode.png



Code:
c
c output PBM format image of barcode
c
      program barcode
      integer data_file
      integer i, j, k, p, height, width
      integer checksum
      integer given(13), parity(0:9, 2:7), codes(3, 0:9, 7)
      parameter (data_file = 10)
      parameter (height = 20, width = 97)

c
c read in parity and codes from data file
c
      open (data_file, FILE="barcode_data.dat", STATUS="OLD")
      do i = 0, 9
        read (data_file, 910) (parity(i, j), j = 2, 7)
      enddo
      do i = 1, 3
        do j = 0, 9
          read (data_file, 920) (codes(i, j, k), k = 1, 7)
        enddo
      enddo
      close (data_file)

c
c read in given numbers and calculate checksum
c
      read (*,*) (given(i), i = 1, 12)
      given(13) = checksum(given)

c
c output
c
      write (*, 940) "P1"
      write (*, 950) width, height + 2
c top line of white
      do i = 1, width
        write (*, 960) 0
      enddo
      do k = 1, height
c left guard bars
        write (*, 940) "0 1 0 1"
        do i = 2, 7
          p = parity(given(1), i)
          write (*, 920) (codes(p, given(i), j), j = 1, 7)
        enddo
c centre guard bars
        write (*, 940) "0 1 0 1 0"
        do i = 8, 13
          write (*, 920) (codes(3, given(i), j), j = 1, 7)
        enddo
c right guard bars
        write (*, 940) "1 0 1 0"
      enddo
c bottom line of white
      do i = 1, width
        write (*, 960) 0
      enddo

c
c formats
c
 910  format (6I2)
 920  format (7I2)
 940  format (A)
 950  format (2I3)
 960  format (I2)

      stop
      end

c
c calculate and return checksum from given digits
c
      integer function checksum(given)
      integer i, total, given(12)

      total = 0
      do i = 1, 12
        total = total + given(i)
        if (0 == MOD(i, 2)) then
          total = total + (2 * given(i))
        endif
      enddo

      checksum = MOD(10 - MOD(total, 10), 10)

      return
      end


The data file barcode_data.dat is:

Code:
1 1 1 1 1 1
1 1 2 1 2 2
1 1 2 2 1 2
1 1 2 2 2 1
1 2 1 1 2 2
1 2 2 1 1 2
1 2 2 2 1 1
1 2 1 2 1 2
1 2 1 2 2 1
1 2 2 1 2 1
0 0 0 1 1 0 1
0 0 1 1 0 0 1
0 0 1 0 0 1 1
0 1 1 1 1 0 1
0 1 0 0 0 1 1
0 1 1 0 0 0 1
0 1 0 1 1 1 1
0 1 1 1 0 1 1
0 1 1 0 1 1 1
0 0 0 1 0 1 1
0 1 0 0 1 1 1
0 1 1 0 0 1 1
0 0 1 1 0 1 1
0 1 0 0 0 0 1
0 0 1 1 1 0 1
0 1 1 1 0 0 1
0 0 0 0 1 0 1
0 0 1 0 0 0 1
0 0 0 1 0 0 1
0 0 1 0 1 1 1
1 1 1 0 0 1 0
1 1 0 0 1 1 0
1 1 0 1 1 0 0
1 0 0 0 0 1 0
1 0 1 1 1 0 0
1 0 0 1 1 1 0
1 0 1 0 0 0 0
1 0 0 0 1 0 0
1 0 0 1 0 0 0
1 1 1 0 1 0 0


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 4 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group