Nội dung trong mã vạch gồm 15 kí tự như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
X1 X2 / X3 X4 - T X5 X6 X7 X8 X9 X10 X11 X12
- Hai ký tự đầu tiên là ký hiệu của lô vé, có giá trị từ A -> Z. VD: AA, AB…
- Ký tự thứ 3 là ký tự có giá trị cố định “/”. Trong mọi mã vạch ký tự thứ 3 luôn có giá trị là “/”.
- Hai ký tự 4 và 5 đại diện cho năm phát hành mã vạch có giá trị từ 0 -> 9. VD: vé phát hành năm 2004 thì X4 = 0, X5 = 4.
- Hai ký tự 6 và 7 có giá trị cố định lần lượt là “-T“. Trong mọi mã vạch ký tự thứ 6 luôn có giá trị là “-“ và ký tự thứ 7 có giá trị là “T”.
- Hai ký tự 8 và 9 đại diện cho loại vé, ký tự 8 có các giá trị 1:Vé lượt, 2:Vé tháng, 3:Vé quí. Ký tự 9 có giá trị từ 1 -> 6 đại diện cho 6 mức thu phí giao thông.
- Các ký tự cuối cùng 10 -> 15 là dãy số serial của mã vạch có giá trị từ 0 -> 9, số serial đầu tiên là 000001.
Ta sẽ tiến hành mã hóa trên các ký tự số, còn những ký tự còn lại sẽ được giữ nguyên không tham gia vào quá trình mã hóa. Như vậy các ký tự 4, 5 và 8 -> 15 sẽ bị mã hóa.
Các bước mã hóa:
• Bước 1: Tách các ký tự số và ký tự chữ
• Bước 2 : Ghép các ký tự số lại thành 1 dãy liên tục theo 1 thứ tự sau:
1 2 3 4 5 6 7 8 9 10
X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
• Bước 3 : Chuyển dãy gồm 10 chữ số này từ hệ thập phân sang hệ 36 (Tam-Thập-Lục-Phân). Kết quả thu được gồm 1 dãy 6 ký tự ở dạng cơ số 36.
1 2 3 4 5 6
Y1 Y2 Y3 Y4 Y5 Y6
• Bước 4 : ghép 2 ký tự X1 và X2 vào đầu dãy vừa được mã hóa ta thu được dãy 8 ký tự đã được mã hóa từ dãy 15 ký tự ban đầu.
X1 X2 Y1 Y2 Y3 Y4 Y5 Y6
• Hệ cơ số 36 được xây dựng trên bộ 26 ký tự in hoa từ A -> Z và 10 ký tự số từ 0 -> 9, sắp xếp chúng theo 1 thứ tự bất kỳ nhưng phải nhất định. Sau đây là một số bộ kí tự cho các trạm thu phí.
“0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y ,Z” Hoặc
“U,C,H,5,S,A,D,T,7,I,9,Y,L,G,M,W,Z,N,8,E,2,F,O,B,6,P,3,4,J,V,1, K,R,0,X,Q”
Hệ cơ số 36 chúng ta biểu diễn bằng 6 bits thì nó sẽ mã hóa được số thập phân tối đa là 36^6 = 2.176.782.336. Như vậy áp dụng thuật toán này vào chương trình thì chương trình sẽ hoạt động được đối với những vé có năm phát hành <= 2021. Khi quá thời hạn này thì chương trình sẽ bị sự cố Y22K.
Các bước giải mã:
• Bước 1 : Từ 1 dãy gồm 8 ký tự đã được mã hóa, ta tách thành 2 nhóm, nhóm 1 gồm 2 ký tự đầu tiên(G1), nhóm 2 gồm 6 ký tự còn lại(G2).
• Bước 2 : 6 ký tự ở nhóm 2 ở hệ cơ số 36, ta chuyển chúng về lại hệ thập phân. Kết quả sẽ được 1 dãy gồm 10 ký tự số.
• Bước 3 : Tách kết quả tìm được từ bước 2 thành 2 nhóm, nhóm 1 gồm 2 ký tự đầu tiên (G3) nhóm 2 gồm 8 ký tự còn lại (G4).
• Bước 4 : ghép các nhóm vừa tách được cùng với những ký tự cố định “/”, ”-“, ”T” theo thứ tự sau: S = G1 + “/” + G3 + “-T” + G4. S chính là nội dung của mã vạch ở dạng ban đầu.
3.2.4Biểu diễn bằng sơ đồ.
Luu đồ 3.1: Mã hóa và giải mã Thuật toán.
Function Encrypt(Source as string) as string //Tách chuỗi 1
S1 = Left(Source,2) S2 = Mid(Source,4,2)
S3 = Right(Source,8) //Ghép các ký tự số S4 = S2 + S3 //Đổi cơ số 10 -> 36 S5 = DecemalToThirtysix(S4) //Ghép chuỗi Encrypt = S1 + S5 End Function
Function Decrypt(Destination as string) as string //Tách chuỗi 1 S1 = Left(Destination,2) S2 = Right(Destination,6) //Đổi cơ số 36 -> 10 S3 = ThirtysixToDecemal (S2) //Tách các ký tự số S4 = Left(S3,2) S5 = Right(S3,8) //Ghép chuỗi Decrypt = S1 + “/” + S4 + “-T” + S5 End Function Hình 3.2: Mã vạch in trên vé
Sau đây là một số mẫu mã vạch trên vé tháng, vé ngày, vé ưu tiên, nhân viên.