Java生成LRC纵向冗余校验

纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验;它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法;通常Modbus协议ASCII模式采用LRC算法。

1.生成LRC校验

/**
     * 生成LRC校验值:
     *
     * 1)对需要校验的数据(2n个字符)两两组成一个16进制的数值求和;
     * 2)将求和结果与256求模;
     * 3)用256减去所得模值得到校验结果(另一种方法:将模值按位取反然后加1);
     */
     
    public static int getCalculateLRC(String data) {

        if (data.length() % 2 != 0) {
            throw new IllegalArgumentException("输入数据长度必须为偶数");
        }
        int sum = 0;
        //两两组合字符转换为十六进制数值求和
        for (int i = 0; i < data.length(); i += 2) {
            String hex = data.substring(i, i + 2);
            try {
                int value = Integer.parseInt(hex, 16);
                sum += value;
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("输入数据包含非十六进制字符", e);
            }
        }
        //求和结果与256求模
        int mod = sum % 256;
        //计算校验结果
        return 256 - mod;
    }

2.调用

ASCII字符串:900600000005
调用方法:getCalculateLRC("900600000005");
LRC校验:65
组合ASCII字符串:90060000000565

你可能感兴趣的:(Java,java,开发语言,Modbus,ASCII)