国税总局发票助手二维码生成的CRC计算

最近为了在我们的应用里生成发票信息的二维码,根据国税总局的二维码文档(见文后),唯一麻烦的地方就是需要计算一个CRC16的值。中间主要碰到了两个问题,一是文档中没有描述中文编码方式,经过试验,我们发现编码方式应为GBK。二是CRC值的生成,网上找了一些代码,生成的CRC16总是和总局发票助手生成的CRC16不一样。最后还是自己根据以下算法写了一个:


1)将字节流的前2字节放入一个长度为16的寄存器(int);
2)如果寄存器的首位为1,将寄存器左移1位(寄存器的最低位从下一个字节获得),再与生成多项式的简记式(CRC16的生成多项式简记式为0x8005)异或;
    否则仅将寄存器左移1位(寄存器的最低位从下一个字节获得);
3)重复第2步,直到字节流全部移入寄存器;
4)最后补充2个0字节,重复第二步
5)寄存器中的值则为CRC校验码。


示例代码如下

    private int crc16 = 0x8005;
    private int a = 0x0000;    

    public void testCRC() throws UnsupportedEncodingException {
        String input = "杭州XX科技有限公司</>9133XXXXXX92XXX9X</>杭州市滨江区XXXxxx号xx大厦x层xxx室</>xxx股份有限公司xxxx</>";

        byte[] inputs = input.getBytes("GBK")
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅帅兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值