/* * 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); }
/// <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(); }
public static string ToGtin(string upc) { if (!GtinManager.IsValid(upc)) { throw new InvalidCastException("upc is not valid"); } return(upc.PadLeft(s_gtinDigits, '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)); }
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); }
/// <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); }