Barcodes have been in general use since the the early 70s, but became prominent in the 80s and 90s. They are now everywhere from items in the grocery store or books in a bookshop, to virtually all items available for sale.
To the uninitiated barcodes can be something akin to magic. After all, the barcode is scanned and often the item is identified, it's price is shown and other information may be display on the cash register or computer. For the vast majority of applications, barcodes store just a single piece of information, usually some form of identification number. When the barcode is scanned, this code is read, and then used as the basis of a query to the connected computers software or database. This may seem at times counter-intuitive. Why not store all the information in the barcode? The reason for this is two fold. Firstly most barcode types can only store a small, finite amount of information, usually around 20-50 alphanumeric characters. So while the barcode could store, say a brief description and the price, imagine what would happen if the price changes, you would have to create a new barcode for every item where the price has changed, which for most applications would be horrendous.
Barcodes fall into two primary categories:
1D (one dimensional) or Linear
These barcodes are one dimensional and embed a simple numeric or alphanumeric string within them. Although there are many types, the most common are Code39, Code 128, EAN, UPC, PostBar and PostNet to name a few. Many of the ones here also have sub types, where the code embedded is expected to be a fixed length . Most bespoke applications would use Code 128, unless there is a specific need for something else.
2D (two dimensional) or Matrix
These barcodes are two dimensional and can embed much more information within them. The most commonly used are DataMatrix, QRCode, MaxiCode and PDF417. Again there are many other types too, but they usually have a more specialised use. There are numerous sub types, but a lot less than their 1D counterpart. This is probably because 2D barcodes are much newer. Most handheld applications use QR codes. This is because they can be printed in a very small form factor.
Generally there are 2 kinds of barcode code reader. 1D which usually utilise a laser beam when the trigger is pressed and 2D, which usually utilises what is known as an imager. Imagers in essence take a snapshot of the barcode and use internal software to analyse and decode the barcode. Barcode readers are usually tethered, which means they are connected to a computer via a USB cable. They can also be wireless, where there is a base station connected to the computer and the scanner communicates wirelessly with this, or they can utilise Bluetooth, which means they can be used with desktop computers, or phones, tablets and other mobile computers.