示例#1
0
        public static bool IsValid_SGTIN_96(string hex_SGTIN_96, bool checkHeader = false, bool checkPartition = false)
        {
            if (!Regex.IsMatch(hex_SGTIN_96, @"\A\b[0-9a-fA-F]+\b\Z") || hex_SGTIN_96.Length != 24)
            {
                return(false);
            }

            var ranges       = new SGTIN_96_Ranges();
            var binaryString = string.Join(string.Empty,
                                           hex_SGTIN_96.Select(c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0')));

            if (checkHeader)
            {
                var headerBinary = binaryString.Substring(ranges.HeaderStart, ranges.HeaderLength);
                var headerInt    = Convert.ToInt32(headerBinary, 2);
                if (headerInt != 48)
                {
                    return(false);
                }
            }

            if (checkPartition)
            {
                var partitionBinary = binaryString.Substring(ranges.PartitionStart, ranges.PartitionLength);
                var partitionInt    = Convert.ToInt16(partitionBinary, 2);
                if (partitionInt > 6)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        public static SGTIN_96 Decode_SGTIN_96(string EPC_tag)
        {
            // result of SGTIN-96 object
            var result = new SGTIN_96();

            result.HexValue = EPC_tag;

            //check if EPC_tag is valid SGTIN-96 tag
            if (!Validator.IsValid_SGTIN_96(EPC_tag, true, true))
            {
                result.IsProperlyEncoded = false;
                result.ItemReference     = 0;
                return(result);
            }
            result.IsProperlyEncoded = true;

            // object for SGTIN-96 ranges
            var ranges = new SGTIN_96_Ranges();

            //converting SGTIN-96 to binary string
            string binaryString = "";

            //binaryString = Convert.ToString(Convert.ToInt32(EPC_tag, 16), 2);
            binaryString = string.Join(
                string.Empty,
                EPC_tag.Select(c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0')));

            //separating and decoding binary string
            var headerBinary = binaryString.Substring(ranges.HeaderStart, ranges.HeaderLength);

            result.Header = Convert.ToInt32(headerBinary, 2);

            var filterBinary = binaryString.Substring(ranges.FilterStart, ranges.FilterLength);

            result.Filter = Convert.ToInt16(filterBinary, 2);

            var partitionBinary = binaryString.Substring(ranges.PartitionStart, ranges.PartitionLength);

            result.Partition = Convert.ToInt16(partitionBinary, 2);

            var partitionResult = PartitionResolveHelper.GetCompanyPrefixAndItemReference(result.Partition);

            var companyPrefixBinary = binaryString.Substring(ranges.CompanyPrefixStart, partitionResult.CompanyPrefixBitsCount);

            result.CompanyPrefix = Convert.ToInt64(companyPrefixBinary, 2);

            var itemReferenceBinary = binaryString.Substring(ranges.CompanyPrefixStart + partitionResult.CompanyPrefixBitsCount, partitionResult.ItemReferenceBitsCount);

            result.ItemReference = Convert.ToInt32(itemReferenceBinary, 2);

            result.SerialNumber = string.Concat(binaryString.TakeLast(ranges.SerialNumberLength));

            return(result);
        }