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
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.
1 2 3 4 5 6 7 8
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 tố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.
Kết quả mã hĩa (Encrypted chars) Mã hĩa
3.2.4Biểu diễn bằng sơ đồ.
Thuật tố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
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.