I built a barcode reader at one point using an LED and phototransistor coupled with a 6811 I think. It was the "pen" type that you sweep across the bar code. It then measures the amount of light and dark areas and uses a look up table to translate each set of bars into a particular digit which it then output from its serial port. It worked ok, but not as reliable as the professional versions (though it could read forward or backward). I dont recall what types of codes it could read, but it was not a very difficult project (a few days maybe?).
I bet now it would be even easier. At the time, my micro did not have a prescaler for the input capture, so I had to handle overflow. Now the modern breed (pics/avrs) have the ability to scale the counter so handling overflow is either easier or not even neccessary.