Exemplo n.º 1
0
        /*
         * public static string ToGtin(string companyPrefixAndItemReferenceBinary, string partition)
         * {
         *  Partitiion _partition;
         *  if (PartitionTable.TryGetValue(partition, out _partition))
         *  {
         *      var companyPrefixBinary = companyPrefixAndItemReferenceBinary.Substring(0, _partition.CompanyPrefixBits);
         *      var itemReferenceBinary = companyPrefixAndItemReferenceBinary.Substring(_partition.CompanyPrefixBits, _partition.ItemReferenceBits);
         *      var companyPrefix = Convert.ToInt32(companyPrefixBinary, 2).ToString().PadLeft(_partition.CompanyPrefixDigits, '0');
         *      var itemReference = Convert.ToInt32(itemReferenceBinary, 2).ToString().PadLeft(_partition.ItemReferenceDigits, '0');
         *      var gtin = itemReferenceBinary.First().ToString() + companyPrefix + itemReference.Substring(1);
         *      var checkNumber = GenerateCheckNumber(gtin);
         *
         *      return gtin + checkNumber;
         *  }
         *
         *  return string.Empty;
         * }
         * */

        /// <summary>
        /// 判断UPC对应的GTIN是否合法
        /// </summary>
        /// <param name="upc">带检测的UPC</param>
        /// <returns></returns>
        public static bool IsValid(string upc)
        {
            string gtin                = upc.PadLeft(s_gtinDigits, '0');
            string orignCheckNumber    = gtin.Last().ToString();
            string generatedheckNumber = GtinManager.GenerateCheckNumber(gtin.Substring(0, gtin.Length - 1));

            return(string.Compare(orignCheckNumber, generatedheckNumber) == 0);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 根据UPC及partition获得EPC对应的 CompanyPrefix 和 ItemReference
        /// </summary>
        /// <param name="upc"></param>
        /// <param name="partition"></param>
        public GtinManager(string upc, string partition)
        {
            this.Upc       = upc;
            this.Partition = partition;
            this.Gtin      = GtinManager.ToGtin(upc);

            Identify();
        }
Exemplo n.º 3
0
        public static string ToGtin(string upc)
        {
            if (!GtinManager.IsValid(upc))
            {
                throw new InvalidCastException("upc is not valid");
            }

            return(upc.PadLeft(s_gtinDigits, '0'));
        }
Exemplo n.º 4
0
        /// <summary>
        /// 转成24位十六进制EPC 二进制为96位
        /// </summary>
        /// <param name="header">96 bit GTIN</param>
        /// <param name="filterValue">Selling Unit</param>
        /// <param name="partition">7 digit Mfg Nbr including number system characters</param>
        /// <param name="upc">UPC will convert to GTIN</param>
        /// <param name="serialNumber">Serial Nbr assigned by EPC Mgr for item</param>
        /// <returns></returns>
        public static string UpcConvertEpc(string header, string filterValue, string partition, string upc, string serialNumber)
        {
            var gtin               = new GtinManager(upc, partition);
            var headerBinary       = Convert.ToString(int.Parse(header), 2).PadLeft(s_headerBits, '0');
            var filterValueBinary  = Convert.ToString(int.Parse(filterValue), 2).PadLeft(s_filterValueBits, '0');
            var partitionBinary    = Convert.ToString(int.Parse(partition), 2).PadLeft(s_partitionBits, '0');
            var gtinBinary         = gtin.ToBinaryString();
            var serialNumberBinary = Convert.ToString(long.Parse(serialNumber), 2).PadLeft(s_serialNbrBits, '0');

            var epcBinary = string.Format("{0}{1}{2}{3}{4}", headerBinary, filterValueBinary, partitionBinary, gtinBinary, serialNumberBinary);

            return(EpcManager.BinaryEpcToHex(epcBinary));
        }
Exemplo n.º 5
0
        internal static GtinManager ToGtinManager(string companyPrefixAndItemReferenceBinary, string partition)
        {
            GtinManager gtinManager = new GtinManager(partition);

            Partitiion _partition;

            if (PartitionTable.TryGetValue(partition, out _partition))
            {
                var companyPrefixBinary = companyPrefixAndItemReferenceBinary.Substring(0, _partition.CompanyPrefixBits);
                var itemReferenceBinary = companyPrefixAndItemReferenceBinary.Substring(_partition.CompanyPrefixBits, _partition.ItemReferenceBits);
                var companyPrefix       = Convert.ToInt32(companyPrefixBinary, 2).ToString().PadLeft(_partition.CompanyPrefixDigits, '0');
                var itemReference       = Convert.ToInt32(itemReferenceBinary, 2).ToString().PadLeft(_partition.ItemReferenceDigits, '0');
                var gtin        = itemReferenceBinary.First().ToString() + companyPrefix + itemReference.Substring(1);
                var checkNumber = GenerateCheckNumber(gtin);

                gtinManager.Gtin          = gtin + checkNumber;
                gtinManager.CompanyPrefix = companyPrefix;
                gtinManager.ItemReference = itemReference;
            }

            return(gtinManager);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 解析EPC
        /// </summary>
        /// <param name="epc">24位十六进制的EPC</param>
        public static EpcManager Parse(string epc)
        {
            var epcBinary = Utils.HexToBinary(epc);

            var headerBinary = epcBinary.Substring(0, s_headerBits);
            var header       = Convert.ToInt32(headerBinary, 2).ToString();

            var filterValueBinary = epcBinary.Substring(s_headerBits, s_filterValueBits);
            var filterValue       = Convert.ToInt32(filterValueBinary, 2).ToString();

            var partitionBinary = epcBinary.Substring(s_headerBits + s_filterValueBits, s_partitionBits);
            var partition       = Convert.ToInt32(partitionBinary, 2).ToString();
            var companyPrefixAndItemReferenceBinary = epcBinary.Substring(s_headerBits + s_filterValueBits + s_partitionBits, s_gtinBits);

            var serialNumberBinary = epcBinary.Substring(s_headerBits + s_filterValueBits + s_partitionBits + s_gtinBits, s_serialNbrBits);
            var serialNumber       = Convert.ToInt64(serialNumberBinary, 2).ToString();

            EpcManager epcManager = new EpcManager(header, filterValue, partition);

            epcManager.GTIN         = GtinManager.ToGtinManager(companyPrefixAndItemReferenceBinary, partition);
            epcManager.SerialNumber = serialNumber;
            return(epcManager);
        }