Engineering tools · EPC · GS1

RFID Kod Dönüştürücü

SGTIN-96 (RFID Hex) ve Barkod (GTIN) + Seri Numarası arasında dönüştürme aracı. Zebra, Chainway, Impinj, Nextwaves gibi standart RFID okuyucularla uyumludur. GS1 EPC Etiket Veri Standardı'na dayanmaktadır.

RFID Dönüştürücü

RFID Hex (SGTIN-96) ile GS1 Barkod (GTIN) + Seri Numarası arasında dönüştürme yapın.

Scheme:SGTIN-9696 bits / Header 0x30

Kod Mantığı ve Adım Adım

// 1. Binary Conversion

src = bin(0x3076215F0C5D974000000001) // = "001100000111011000100001010111110000110001011101100101110100000000000000000000000000000000000001"

// 2. Extract Fields (Bit Slice)

header = src[0:8] "00110000" 0x30
filter = src[8:11] "011" 3
partition = src[11:14] "101" 5

// 3. Determine Partition Rule (Partition 5)

rule = PARTITIONS[5]
// Company Bits: 24, Item Bits: 20

// 4. Extract Company, Item & Serial

company = src[14:38] "100010000101011111000011" 8935363
itemRef = src[38:58] "00010111011001011101" 095837
serial = src[58:96] "00000000000000000000000000000000000001" 1

Geliştirici Kodu

Bu yardımcı mantığı projenizde kullanın. Aşağıdan bir dil seçin.

1// TypeScript / JavaScript SGTIN-96 Utils
2
3export const GS1_PARTITION_TABLE = [
4  { value: 0, partition: 0, companyPrefixBits: 40, itemReferenceBits: 4, companyDigits: 12, itemDigits: 1 },
5  { value: 1, partition: 1, companyPrefixBits: 37, itemReferenceBits: 7, companyDigits: 11, itemDigits: 2 },
6  { value: 2, partition: 2, companyPrefixBits: 34, itemReferenceBits: 10, companyDigits: 10, itemDigits: 3 },
7  { value: 3, partition: 3, companyPrefixBits: 30, itemReferenceBits: 14, companyDigits: 9, itemDigits: 4 },
8  { value: 4, partition: 4, companyPrefixBits: 27, itemReferenceBits: 17, companyDigits: 8, itemDigits: 5 },
9  { value: 5, partition: 5, companyPrefixBits: 24, itemReferenceBits: 20, companyDigits: 7, itemDigits: 6 },
10  { value: 6, partition: 6, companyPrefixBits: 20, itemReferenceBits: 24, companyDigits: 6, itemDigits: 7 },
11];
12
13export function encodeSgtin96(gtin: string, serial: string, filter: number) {
14  gtin = gtin.padStart(14, "0");
15  const p = GS1_PARTITION_TABLE.find(rule => {
16    const cp = parseInt(gtin.slice(1, 1 + rule.companyDigits));
17    const ir = parseInt(gtin[0] + gtin.slice(1 + rule.companyDigits, 13));
18    return cp < (1 << rule.companyPrefixBits) && ir < (1 << rule.itemReferenceBits);
19  });
20  if (!p) throw new Error("Invalid GTIN for SGTIN-96");
21
22  const cpVal = parseInt(gtin.slice(1, 1 + p.companyDigits));
23  const irVal = parseInt(gtin[0] + gtin.slice(1 + p.companyDigits, 13));
24  
25  let b = (0x30).toString(2).padStart(8,"0");
26  b += filter.toString(2).padStart(3,"0");
27  b += p.partition.toString(2).padStart(3,"0");
28  b += cpVal.toString(2).padStart(p.companyPrefixBits,"0");
29  b += irVal.toString(2).padStart(p.itemReferenceBits,"0");
30  b += parseInt(serial).toString(2).padStart(38,"0");
31  return binaryToHex(b);
32}
33
34export function decodeSgtin96(hex: string) {
35  const b = hexToBinary(hex);
36  const pVal = parseInt(b.substring(11, 14), 2);
37  const rule = GS1_PARTITION_TABLE.find(r => r.partition === pVal);
38  if (!rule) throw new Error("Invalid Partition");
39
40  const cp = parseInt(b.substring(14, 14 + rule.companyPrefixBits), 2);
41  const ir = parseInt(b.substring(14 + rule.companyPrefixBits, 14 + rule.companyPrefixBits + rule.itemReferenceBits), 2);
42  const serial = parseInt(b.substring(14 + rule.companyPrefixBits + rule.itemReferenceBits, 96), 2);
43
44  const cpStr = cp.toString().padStart(rule.companyDigits, "0");
45  const irStr = ir.toString().padStart(rule.itemDigits, "0");
46  const gtinCore = irStr[0] + cpStr + irStr.substring(1);
47
48  // Check digit calculation
49  let sum = 0;
50  for (let i = 0; i < 13; i++) {
51    sum += parseInt(gtinCore[i]) * (i % 2 === 0 ? 3 : 1);
52  }
53  const check = (10 - (sum % 10)) % 10;
54  
55  return {
56    gtin: gtinCore + check,
57    serial: serial.toString()
58  };
59}
60
61function binaryToHex(b: string) {
62  let hex = "";
63  for (let i = 0; i < b.length; i += 4) {
64    hex += parseInt(b.substring(i, i + 4), 2).toString(16).toUpperCase();
65  }
66  return hex;
67}
68
69function hexToBinary(h: string) {
70  let bin = "";
71  for (let i = 0; i < h.length; i++) {
72    bin += parseInt(h[i], 16).toString(2).padStart(4, "0");
73  }
74  return bin;
75}

Açıklayın

SGTIN-96, 6 bölümden oluşan 96 bitlik bir ikili dizedir:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Başlık (8 bit)Bits 0-8 (8)
001100000x30

Bunun SGTIN-96 olarak tanımlanmasını sağlayan standart önek (00110000).

Filtre (3 bit)Bits 8-11 (3)
0113

Nesne türü (örneğin, 1 = Perakende Perakende). Aşağıdaki Referans Kılavuzuna bakın.

Bölüm (3 bit)Bits 11-14 (3)
1015

Bölüm 5 şu anlama gelir: Şirket Kodu 24 bit, Ürün Kodu 20 bit alır.

Şirket ÖnekiBits 14-38 (24)
1000100001010111110000118935363

GS1 tarafından atanan benzersiz şirket kodu.

Ürün ReferansıBits 38-58 (20)
00010111011001011101095837

Sizin özel ürün kodunuz.

Seri Numarası (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Her bir fiziksel ürün için benzersiz tanımlayıcı.

Fiziksel barkodunuz ve elektronik ürün kodu (EPC) arasındaki ilişkiyi görselleştirme.

Barkod (GTIN) ve SGTIN-96 URI arasındaki bağlantıyı gösteren diyagram
  1. Adım 1: EPC şeması için ikili başlık değerini belirleyin. SGTIN-96 için ikili başlık değeri “00110000”dır.
  2. Adım 2: Bölüm Değeri Tablosundan Şirket Önekinin basamak sayısına göre Bölüm Değerini seçin.
  3. Adım 3: Filtre Değerini, Bölüm Değerini, Şirket Önekinini, Ürün Referansını ve Seri #'yi ikili değere dönüştürün.
  4. Adım 4: İkili EPC'yi oluşturmak için Başlık, Filtre, Bölüm, Şirket Öneki, Ürün Referansı ve Seri # ikili değerlerini sırayla birleştirin.

SGTIN-96 Referans Kılavuzu

DeğerAçıklama
0Diğerleri
Diğer kategorilere uymayan ürünler için kullanılır. Genel perakende satışta nadiren kullanılır.
1Satış Noktası (POS) Ticari Ürünü
Satış noktasında satılan standart tüketici birimi. Örnek: Tek bir şampuan şişesi.
2Nakliye için Tam Kasa
Birden fazla ürün içeren standart bir nakliye birimi. Örnek: 12 şampuan şişesinden oluşan bir karton. 'Bir kasa' ile 'bir ürün'ü ayırt etmek için lojistik açısından kritik öneme sahiptir.
3Rezerve Edildi
Gelecekteki kullanımlar için ayrılmıştır.
4İç Paket Ticari Ürün Gruplaması
Tam bir kasadan daha küçük bir gruplama, genellikle raf teşhiri veya elleçleme için. Örnek: Ana kartonun içindeki shrink ambalajlı 3'lü paket.
5Rezerve Edildi
Gelecekteki kullanımlar için ayrılmıştır.
6Birim Yükü
Tipik olarak birden fazla koli içeren, büyük bir lojistik birimi, genellikle bir palet.
7Tüketici Birimi İçindeki Bileşen
Bir tüketici biriminin içindeki belirli bir parça. Örnek: Bir oyuncağın içindeki pil kapağı.
DeğerŞirket ÖnekiÜrün Referansı
040 Bitler / 12 Basamaklar4 Bitler / 1 Basamaklar
137 Bitler / 11 Basamaklar7 Bitler / 2 Basamaklar
234 Bitler / 10 Basamaklar10 Bitler / 3 Basamaklar
330 Bitler / 9 Basamaklar14 Bitler / 4 Basamaklar
427 Bitler / 8 Basamaklar17 Bitler / 5 Basamaklar
524 Bitler / 7 Basamaklar20 Bitler / 6 Basamaklar
620 Bitler / 6 Basamaklar24 Bitler / 7 Basamaklar

SGTIN-96 Sıkça Sorulan Sorular

  • Sisteme etiketin ambalaj seviyesini bildirir. Bir sistem 'Kutu' etiketini (Filtre 2) okursa, birden fazla ürün içerdiğini bilir. Bu, çift saymayı (örneğin, bir kutuyu tek bir birim olarak saymak) önler ve geçerli nakliye doğrulamasını sağlar.
  • Kutu (Filtre 2), nakliye için kullanılan birincil nakliye birimidir. İç Paket (Filtre 4), genellikle daha kolay kullanım veya sergileme için (24'lü bir kutunun içindeki 6'lı paket gibi) bu kutunun içindeki bir alt bölümdür. Lojistik sistemleri Kutuları izler; Mağaza operasyonları İç Paketleri verimli bir şekilde işleyebilir.
  • Kod çözme başarısız olacak veya yanlış Barkod üretecektir. Bölüm, Şirket Önekinin tam olarak nerede bittiğini ve Ürün Referansının nerede başladığını belirler. Bu 'bölünme noktası' yanlışsa, amaçlanandan farklı bir Şirket Kodu elde edersiniz.
  • Standart GTIN (Barkod) yalnızca ürün türünü (örneğin, '12oz Soda') tanımlar. SGTIN-96 bir Seri Numarası ekleyerek, her bir kutuya benzersiz bir kimlik kazandırır. Bu, ürün düzeyinde izlenebilirliği sağlar ve tam olarak hangi özel ürünün satıldığını, çalındığını veya süresinin dolduğunu izlemenizi sağlar.
  • Evet. Yukarıdaki dönüştürücüde gösterildiği gibi, SGTIN-96 dizisi, eksiksiz GTIN-14'ü içerir. Seri Numarasını ve başlık bilgilerini kaldırarak, orijinal perakende barkodunu mükemmel bir şekilde yeniden oluşturabilirsiniz.
  • Başlık (0x30), GS1 tarafından tanımlanan standart bir 8 bitlik önektir. Herhangi bir RFID okuyucusuna şunu söyler: "Bu etiket SGTIN-96 standardı kullanılarak kodlanmıştır." Farklı standartlar için (paletler için SSCC veya varlıklar için GIAI gibi) başka başlıklar da mevcuttur.