火车票二维码解读

 

这是这次十一出行的火车票:

将其用二维码扫描软件识读后,对应得到如下数字串:

1.北京西到西宁

29080416  0729216630656199782691784864787580325590126025515049260  943200000000000000000000  05389762880538976288053897628805389762880538976288  2130000

2.兰州到敦煌

38064746  1443946309550728439046736680708653506459580696982244312  943200000000000000000000  05389762880538976288053897628805389762880538976288  1904000

3.敦煌到西安

28048150  0870514177971464577513331727195195523384397645031676979  943200000000000000000000  05389762880538976288053897628805389762880538976288  0932000

4.延安到北京西

32088422  1518252072155444183365777363865714603893885319361899155  943200000000000000000000  05389762880538976288053897628805389762880538976288  1535000

 

下面开始解读:

 

1-2位(2位):对应车票左上方字母;(A26,B27,...

3-8位(6位):088422车票上的红字:G088422票号

9-63位(55位,票号后到9432前这一段):加密后的数字,据说包含买票的时间,地点,窗口

64-87位(24位,9432这段):预留位,将来存储身份证号

88-137位(50位): 0538976288重复 5次,0538976288(十进制) -> 0x20202020(十六进制),ASCII里面0x20 就是一个 空格,所以这段包含20个空格,以后可存个姓名拼音,或是用Unicode存个名字

138-144位(7位):1535000,开车时间1535

 

从二维码可以得到两个关键信息:即票号和开车时间,如果和票面上的一致,那么几乎可以肯定为真票。

 

Ps:

车票左下的一组21位数字:

1-5位是发售车站代码;6-7位为售票方式码;8 10位为售票窗编码(不是窗口号);11 14位购票日期;1521 位是车票号码.

 

二维码编码解码器源码 本源码实现可以在C#中使用的1D/2D编码解码器。条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票二维码识别、网易的首页有二维码图标,用户只需要用手机扫描一下就可以看到手机版网易的网址,免去了输入长串字符的麻烦。 条形码的标准: 条形码的标准有ENA条形码、UPC条形码、二五条形码、交叉二五条形码、库德巴条形码、三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码。EAN商品条形码亦称通用商品条形码,由国际物品编码协会制定,通用于世界各地,是目前国际上使用最广泛的一种商品条形码。我国目前在国内推行使用的也是这种商品条形码。EAN商品条形码分为EAN-13(标准版)和EAN-8(缩短版)两种。 二维码的编码标准: 全球现有的二维码多达200种以上,其中常见的技术标准有PDF417(美系标准),QRCode(日系标准),Code49,Code16K,CodeOne,DM(韩系标准),GM(中国标准),CM(中国标准)等20余种。用得最多的是QRcode。 下面借助google的开源项目zxing来实现1D/2D的编码和解码 zxing的功能还是很强大的,最初是用java编写,并支持Android、ios、symbian等手机操作系统。 不过不知是何原因,该官网连一个例子也没有,文档也是字典式的把所有类列出来,一点都没为读者考虑。 下面我把如果使用zxing完成上图所示例子讲解一遍,供初学者参考: 1.我们新建一个Winform测试项目; 2.从官网下载zxing开源项目,大概16m的样子,解压缩后打开zxing-2.1\csharp目录,将该目录拷贝到我们新建的Winform项目下(方便调试和看源码,并非一定要如此); 3.winform项目中添加对zxing项目的引用; 4.按上图所示例子建好控件,“生成条形码”的代码如下: 其中需要注意BarcodeFormat参数,可以打开定义看到具体的编码方式,自己百度每种编码方式对输入的要求。 这里EAN_13编码要求是13位长度的数字,并且满足:把所有偶数序号位上的数相加求和,用求出的和乘3,再把所有奇数序号上的数相加求和,用求出的和加上刚才偶数序号上的数,然后得出和能被10整除。(这个规则校验在UPCEANReader类的checkStandardUPCEANChecksum方法里面,如果不需要,可以去掉) 注意编码问题,在com.google.zxing.qrcode.encoder.Encoder类中修改默认编码为utf-8,否则解码出现的是乱码。 System.String DEFAULT_BYTE_MODE_ENCODING = "UTF-8"; 此处之前是"ISO-8859-1",之所以改成UTF-8是因为,在解码的时候程序会猜测可能的编码,如果猜测失败则默认是UTF-8,代码在com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的guessEncoding方法中。 所以此开源项目也缺少全局性思考,连编码和解码的默认编码方式都不一致。 经网友反映,还是有些中文会出现解码成乱码,而有些又可以,估计还是guessEncoding方法猜测编码出现了偏差,直接将guessEncoding方法写成返回UTF8就行了。 4.实现图片解码,即把条形码或二维码图片解码成其真实内容,当然在pc上应用不大,但可能只是还没发现而已,代码如下: opFilePath是图片路径,你可以用openFileDialog控件打开文件来得到路径。 注意: 点解码按钮前要先选择一张二维码或条形码图片,即先点击“…”按钮选择图片,然后再点“解码”按钮。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值