Most of you have probably seen some of
these before, they're QR Codes, right? Well, not exactly. Technically only this one is
a QR Code. The rest are different codes that you maybe have never heard of, like this one which
is called a Data Matrix code and this one you'll see in some places, especially in electronics.
For example, if I open up this old HP laptop they're all over the place. I think I counted
about seven of them and you may have even tried scanning these with your phone thinking
it was a QR Code before out of curiosity, and it didn't work and you never
really thought anything about it. All of these different types of codes are called
either Matrix barcodes or just 2D barcodes and they're used for all sorts of stuff, having
URLs or just storing product information, even allowing you to connect to a Wi-Fi hotspot.
And today I'm going to turn you into an expert on all of the most popular ones,
and I'm also going to show you how they're actually encoded, at least for some
of them, and it should be pretty interesting. First let's go over a quick introduction
to these Matrix barcodes. So like original, regular barcodes that are one dimensional,
matrix or 2D barcodes are designed to be easily and quickly read by computers or machines. One
dimensional barcodes like UPC usually store the information in different widths of lines and
spaces and then that translates to different numbers. And the advantage of this is that
they can be read very easily by lasers just going across because they're one dimensional. Two
dimensional barcodes on the other hand, just by looking at them you can tell that they can store
way more data than just one dimensional ones that mostly store numbers, but the methods for storing
information in two dimensions can vary wildly. There are some that are pretty widely used by all
sorts of different people and companies such as QR Code and Data Matrix. I'll get into more detail
about them later, but there are others that may only be used by really a single company. For
example, MaxiCode, which was invented and used by UPS. This one's actually public domain now,
but it was basically made to prioritize speed necessarily over capacity, which is important
if a package is flying across a conveyor belt. There's also Aztec code which is apparently
used in a lot of countries for train tickets and such, or the PDF417 code, which is
reminiscent looking of original barcodes. And this can be seen on things like airplane
boarding passes, US postal shipping labels, and most if not all, US IDs on the back. There's also some more exotic ones such
as ShotCode, which is actually circular, colored codes like JAB Code or even
the High Capacity Colored Barcode, which uses colored triangles for storing data
and this one was actually developed by Microsoft. Another probably obvious and major
difference between 1D and 2D barcodes is that while 1D barcodes can be read with
just a simple linear laser, 2D barcodes, almost all of them have to be read with a camera,
obviously, that can see the whole thing at once. Why don't we first go over QR Code, which is
probably the most well-known, and it actually stands for Quick Response code. It can easily be
recognized by the three big squares in the three corners only, not the fourth. These are known
as the finder pattern, and it basically just tells the camera, the orientation of the code,
to know which is up and down, left and right. There are many different possible sizes of
QR Codes, 40 in fact, and each version number will tell you the size where the number
of pixels across for that code is four times the version number plus 17. For example, QR
Code Version 1 is 21x21 and Version 40 is 177x77. A Version 40 QR Code can store 4,296 alphanumeric
characters. To put that in perspective, about 2-3 of these could store basically the entire
script of the average of one of my videos. Now depending on the size of the QR Code,
it may also have more squares in the middle and this is called the alignment pattern.
And there's also a variant called Micro QR, which has one finder square, and
that can go down to 11x11 squares. One really interesting feature of QR Codes and
actually a lot of 2D barcodes is the built-in error correction, which can reconstruct certain
amounts of missing data. And depending on the error correction level, it can actually replace
any kind of missing data up to a certain level, on any part of the code and be able to still
read it. These different levels are low, medium, quartile and high, and you can
see the corresponding amount of percentage of data that can be
missing for it to still work. Of course, higher levels of error
correction do have a trade-off in capacity, but this is actually the reason
you may see some QR Codes that have really fancy designs like cool symbols in the middle
or whatever. And you might be wondering, how is that in there if it's covering up
half the code? Well that's because the error correction still allows the reader to read all
the data even if part of it's just covered up. Now, you might be wondering how QR Codes are
actually encoded and the data's put in there, and I am going to explain that but you
better buckle up because it does get a little bit complicated. So in any QR Code
you're always going to see the three squares, which is the finder code in the three
corners. And that's going to be a black square surrounded by a white border, than a
black board, and then another white board. Then this part of the code always contains
formatting info, so this includes the error correction level and the masking pattern, which
I'll get to later. This part is called the timing pattern, and this is always going to just be
an alternating line of black and white squares and this extends from the black finder
outline. The point of the timing pattern is it can be used if the code is warped, for
example, which helps the camera determine the true shape from the perspective. And
also there's always this black square in this particular spot no matter
what, but I'm not exactly sure why. So now that we have all that basic stuff added
in, we're finally ready to add in the data we want to store, well, almost at least. First
I'll just show you how the data is laid out, basically. So as you probably guessed, each
square which is called a cell, equals one bit, and it can be either a one or a zero. And it
could be either that the black square is one and the white square is zero. I believe that's
encoded in the encoding info so the camera knows. The information stored starts at the bottom right
in blocks, and then goes up, over and down, then back up and continues in this zigzag pattern. At
the start though at the very bottom right you're going to see a four-square block, which actually
tells the computer the encoding "mode" of the following data. There are several different
possibilities for this. It could be numeric, so it's all numbers, alphanumeric so letters
and numbers only, or byte encoding which is basically any ASCII character or Kanji
characters, which is in Japanese and more. The next block after the encoding
block is the character count indicator. And this is going to tell the reader how many
characters the total message is in that data, and therefore it basically tells you how many
blocks of data it's going to have to read. Now this part I'm not a hundred percent clear
on because every example I've come across shows each character as being one byte or eight bits
or eight squares. But apparently depending on the encoding mode and the code version, these
blocks might be anywhere from 8 to 16 bits, but I'm just going to show the
byte encoding which is ASCII and that's just eight characters
because that's the easiest example. So now we finally are really ready to start
adding in the encoded message. Now again, depending on the encoding mode, each little
cell in the block is going to be assigned a number like this, 1, 2, 4, 8, 16, 32, 64, 128.
Now why those numbers in particular you may ask? Well that's because using those numbers, you
can add any combination of them up to make any number between 0 and 255. If you make all
of them black, for example, to trigger a 1 and count all of them, it's 255. If you have
more white than none of them and it's zero. And again, depending on the combination,
you can make any number between those. And the reason that's important is because
that is the number of characters in the ASCII character table if you include the
extended table. So that means you can use one block or eight bits or one byte to refer
to any character in the ASCII table, which includes a lot like uppercase and lowercase
letters, numbers, and even some symbols. So I'll do one quick example. Let's say
you want to encode one capital letter X. So looking at the ASCII table we can see that
that is a decimal 88 corresponding to capital X. So that means that using the table
number we have, we're going to add up 64, 16 and 8 and mark all those as black,
meaning 1, which means just "count these". And then for a computer, it does this very
quickly. It's very easy. It just adds those all up, corresponds it to the ASCII table
number and writes that down. And then the blocks just continue like that. They go
up and over and down and zigzag like that, finally stopping with a 4-bit
(another square) end code. After the end code, it's not
actually done because after that is where the error correcting information
starts. And that again continues in the same eight bit or block sizes and again, it goes up
and down until the very end from right to left. Now I am absolutely not prepared or
qualified to explain how the actual error correction works. It is some serious
hardcore math. I had no idea what I was even looking at when I was looking it up.
If you want to look it up yourself, it's called Reed-Solomon Error Correction.
It's used in a lot of different stuff. So you can just look up more
information about yourself, but I will point out that one really awesome
thing about this type of error correction is that any part of the data can be removed
and any block of error correction can be reused to replace any part of the missing data.
I mean, it's pretty crazy to think about. If you have all the error correction
missing except one error correction block and there's one block of actual data missing, you
can replace the one with the other. Actually I'm not a hundred percent sure if that one-to-one
ratio is true, but that's the basic idea of it. Now, there is one more thing about this whole
encoding method as if things weren't complicated enough, and that is the mask pattern.
There are several different possible black and white patterns, which are called
"masks" and these are overlaid over all the data. And depending on what parts of the mask
are black and white, the black ones, for example, are going to flip any pixels in the data and
make it reversed, while the white parts won't. Apparently the purpose of these masks is
to break up any possible confusing parts of the code. For example, any large
white spaces, or large black spaces, that might make it hard for the scanner to
distinguish how many are actually in there, and also break up patterns that may look like
a finder pattern and also confuse the scan. Now you might think, oh my gosh, why would
they complicate it so much? What's the point? Well, remember the scanner and the computer
can reverse this and decode it all in an instant. It doesn't take that long for the
computer, so it just reads from the format code what type of mask it's using. It simply
flips them back and then does the decoding like it normally would. It doesn't
take the computer anytime at all. So now you know very basics of this,
but I do want to point out I did give a very simplified explanation because
there's a lot more complications I wouldn't want to get into. For example,
how the numbers in the blocks are going to change depending on the orientation, it's not
like all the numbers flipped with the blocks. And also how larger versions of QR Codes are
going to have an alignment pattern in there, which actually changes the shapes of some blocks and how
it cuts off on one end and continues on the other. So it just makes things way more complicated to
explain but again, remember what the computer has no problem decoding this. It's all just built
in preset with the rules and it does it instantly. So that was QR Codes but what about Data
Matrix? It looks similar to QR Codes, but actually it's encoded pretty differently.
So I am going to explain that too, though. I will keep it a lot shorter than
the QR Code explanation. So a Data Matrix code is going to look like this, and you
can always tell because it's going to have a solid black line on the bottom and
left, and this is its finder pattern. These Data Matrix codes may be used for a
lot of purposes, but you'll often see them for electronics. So for example,
I opened up this old HP laptop and you can see they're all over the place in
here. They're on the Wi-Fi chips, on the RAM, all sorts of stuff. And one thing about Data
Matrix is it can actually be arranged as a square or alternatively, a rectangle and
also you can see in this HP one, you can also stack some Data Matrix codes, this one's
four by four, to store some more information. The biggest Data Matrix codes can store up to
1,556 bytes or 2,335 alphanumeric characters. So not as much as the biggest QR
Codes, however, a Data Matrix code can actually store more information per same
amount of space than a QR Code. And that's why you typically see Data Matrix codes on very,
very small things like little electronics because it can store about 50 characters
in as little as 2-3 square millimeters. Now you may actually know that most phone cameras
these days actually have a built-in QR Code reader in the camera app, but a lot of times
these phones cannot actually scan Data Matrix, so if you ever tried it won't work. However, I
did actually find one app, it's called Scandit, which is available on both iOS and Android, it's
completely free, it has no ads and it can scan almost every kind of barcode in use,
not just 1D but also 2D barcodes, all the ones I mentioned. And it even has an
option called "Any Code" where you basically just point it and it'll look
for any kind of code in there. So that seems to be a pretty good
app to have on your phone if you ever come across a 2D barcode you had never seen
before, it might be able to scan it. As for how information is actually encoded in Data
Matrix, again, it's a lot different from QR Codes, but I'll give a super simplified explanation.
Instead of rectangular blocks, like in QR Code, the Data Matrix has these weird L-shaped code
blocks and also instead of going up and down, it kind-of goes in this weird
diagonal zig-zag pattern. And what's also strange is
that for some of these blocks, they actually get partially cut off and then
wrap around and get continued on a completely separate edge. So you might have half of a letter
on one side, then you have to look at the other side to continue reading it and it's going to
depend on what the shape of the cutoff part is. So kind of complicated, but
again, remember the computer knows this set of rules and it has no problem
decoding it pretty much instantly. Like a QR Code, at the end of the message there is going to be
a ending block signal, and then the rest of it also has error correcting information sort
of like QR Codes, just arranged differently. Now there are several more 2D barcodes we
can go over, but I'm not going to explain how each one of them are encoded, that would
take too long. Like I mentioned before, there's the UPS MaxiCode, which actually
stores it in sort-of a hexagonal arrangement, and these are apparently all going to be about
one inch in size. I guess it's just standardized to make it much easier for the camera to read,
it doesn't have to calculate the size. And you also see these MaxiCodes always have
this circular pattern in the middle. This kind of code can only store about
93 characters of data, but they can be chained together to store more. And some of the
information encoded is basically structured data, so it's standardized as being some package
information like the postal code, maybe the addressee, stuff like that, the country it's
going to, all sorts of stuff mostly for shipping. Another code I also mentioned is PDF417
and this is used pretty commonly in both government and commercial applications.
You can usually recognize this because it always has the same pattern for
starting and ending on left and right. Now one interesting advantage of this code, which
is unlike other 2D barcodes we've talked about, is it doesn't have to necessarily be scanned with
a camera. You can actually do a linear sweep with a laser and instead of all at once, it goes line
by line. And this is done because it has different code blocks on the left and right, which
actually tell the reader and scanner, which row it's on while it's scanning. So it goes
down and it makes sure, "okay, I read row one, two, three, four, yes, let's add it all
together" and then it knows the complete message. One interesting code I haven't mentioned before
is called AR Code, and this is apparently used in a lot of augmented reality applications for
things like location tracking of the headset. So if you've ever seen, for example, the prototype
Valve Software VR headset room, you noticed that it had a bunch of codes on the wall. You might've
thought they were QR Codes, but I believe these are actually AR codes, so that was one use in
early days of that. Now obviously VR headsets use other methods now, but it's interesting to see
that way back then that was the thing they used. A final pretty common code we
can mention is called Aztec code, and this is apparently used in a lot of
train rail tickets in Europe especially, for example, Eurostar, which I believe is
in the UK and France, and Deutsche Bahn in Germany. And apparently at least 12 other
rail companies use Aztec codes on the tickets to basically be scanned by the people
checking tickets and that sort of thing. I've also read that some companies in Canada
have used Aztec code for putting on bills sent to customers, I guess, so they can more easily
pay it or something. I don't know, but it's just used there too. Now I've only just scratched the
surface. There are plenty of other 2D barcodes that are out there, probably just less common.
If you want, you can look up the Wikipedia page for Barcodes where it has pretty much all of them
in existence and you can look them up yourself. So let me know what you think down in the
comments. Has your mind been blown now you finally know what all these different codes
are for? Let me know. And also if you liked the video, be sure to like it and also
subscribe for new videos every week. If you guys want to keep watching, the next
video I'd recommend is one where I was talking about what exactly formatting a drive does on
your computer. I go into pretty good detail. You can just click that right there. So thanks
for watching guys and I'll see in the next one.