Sha256: 028a0e20fce1f0ad03b55030b694f27106928d25a47f7eb2bf885e418754b14c
Contents?: true
Size: 1.16 KB
Versions: 2
Compression:
Stored size: 1.16 KB
Contents
require 'USPS-intelligent-barcode/NumericConversions' module Imb # Calculates the Intelligent Mail Barcode CRC. This class is # internal and may change. class Crc extend NumericConversions # Calculate a CRC. +binary_data+ on an Integer. def self.crc(binary_data) crc = MASK bytes = numeric_to_bytes(binary_data, NUM_INPUT_BYTES) crc = crc_byte(crc, bytes.first, LEADING_BITS_TO_IGNORE) for byte in bytes[1...NUM_INPUT_BYTES] crc = crc_byte(crc, byte, 0) end crc end private # :stopdoc: LEADING_BITS_TO_IGNORE = 2 CRC_BITS = 11 CRC_MSB_MASK = 1 << (CRC_BITS - 1) BITS_PER_BYTE = 8 POLYNOMIAL = 0x0F35 MASK = (1 << CRC_BITS) - 1 NUM_INPUT_BYTES = 13 # :startdoc: def self.crc_byte(crc, byte, leading_bits_to_ignore) num_bits = BITS_PER_BYTE - leading_bits_to_ignore data = byte << CRC_BITS - BITS_PER_BYTE + leading_bits_to_ignore num_bits.times do use_polynomial = (crc ^ data) & CRC_MSB_MASK crc <<= 1 crc ^= POLYNOMIAL if use_polynomial != 0 crc &= MASK data <<= 1 end crc end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
USPS-intelligent-barcode-0.2.2 | lib/USPS-intelligent-barcode/Crc.rb |
USPS-intelligent-barcode-0.2.1 | lib/USPS-intelligent-barcode/Crc.rb |