There is an ongoing outage on the primary CPAN mirror. It is possible to work around the issue by using MetaCPAN as a mirror.

NAME

Math::ReedSolomon::Encoder - Calculate Reed-Solomon Error Correction Codes

VERSION

This document describes Math::ReedSolomon::Encoder version 0.001.

Build Status Perl Version Current CPAN version Kwalitee CPAN Testers CPAN Testers Matrix

SYNOPSIS

use Math::ReedSolomon::Encoder qw< :all >;

# message is an array of integers
my $message_aref = [ 0 .. 9 ];

# calculate 22 values of error correction
my $ecc_aref = rs_correction($message_aref, 22);

# calculate the message + correction overall array ref
my $expanded_aref = rs_encode($message_aref, 22);

# message is a string of octets
my $message_str = 'abcdefghij';

# calculate 17 octets of error correction 
my $ecc_string = rs_correction_string($message_str, 17);

# calculate the message + correction overall string
my $expanded_str = rs_encode_string($message_str, 17);

DESCRIPTION

Calculate the Reed-Solomon Error Correction Codes in a very specific (although very common) condition, namely with alpha set to 2 and the irreducible polynomial set to x^8 + x^4 + x^3 + x^2 + 1. This is not written on the stone, though, as it's possible to change these values through package variables $Math::ReedSolomon::Encoder::ALPHA and $Math::ReedSolomon::Encoder::PRIME_POLY.

This module has no pretense of efficiency or optimization, but provides a pure-Perl way of doing the necessary calculations, which comes handy in non-heavy-duty situation where the most straightforward portabiity characteristics are of value. In other terms, this module is expressely geared at being embedded in a bigger program.

INTERFACE

There are a total of four exportable function, two depending on the data format (either arrays of integers, or strings of octets), and two orthogonal alternatives for calculating the Error Correction Codes only or the whole result of appending the ECCs after the input.

rs_correction

my $aref = rs_correction($message_aref, $n_ecc);

Calculate the Error Correction Codes only, array-reference interface. The return value is an array reference that contains the generated ECCs only.

rs_correction_string

my $aref = rs_correction_string($message_string, $n_ecc);

Calculate the Error Correction Codes only, string interface. The return value is a string of octets that contains the generated ECCs only.

rs_encode

my $aref = rs_encode($message_aref, $n_ecc);

Encode the input message adding the Error Correction Codes, array-reference interface. The return value is an array reference that contains a copy of the input message value, followed by the generated ECCs.

rs_encode_string

my $aref = rs_encode_string($message_string, $n_ecc);

Encode the input message adding the Error Correction Codes, string interface. The return value is string of octets that contains a copy of the input message value, followed by the generated ECCs.

Alternative Parameters

The Reed-Solomon ECC calculation techniques work equally well as long as the underlying mathematics are complied with, i.e. as long as the value of alpha is a generator and a suitable irreducible polynomial is selected for polynomial divisions. Math::ReedSolomon::Encoder allows setting these two values via package variables:

  • $Math::ReedSolomon::Encoder::ALPHA

    set to 2 by default.

  • $Math::ReedSolomon::Encoder::PRIME_POLY

    set to 0x11d by default. Each bit represents a coefficient in a base-2 polynomial, so 0x11d is the same as 0b100011101, that is the irreducible polynomial in Z2: x^8 + x^4 + x^3 + x^2 + 1.

The values above are commonly found in practical implementations, e.g. in QR Codes generation.

BUGS AND LIMITATIONS

Minimul perl version 5.24.

Report bugs through GitHub (patches welcome) at https://codeberg.org/polettix/Math-ReedSolomon-Encoder.

AUTHOR

Flavio Poletti <flavio@polettix.it>

COPYRIGHT AND LICENSE

Copyright 2025 by Flavio Poletti <flavio@polettix.it>

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Just to be clear: apache-2.0