E-ticaret & Stok Yönetimi

Barkod Sistemi Kurulumu: EAN-13, QR Code ve Entegrasyon

Fatih Algül
18.03.2026 218 görüntülenme

Barkod Teknolojisine Genel Bakış

Barkod sistemleri, ürün takibi, envanter yönetimi ve satış noktası (POS) operasyonlarında vazgeçilmez bir rol oynar. Günümüzde en yaygın kullanılan iki barkod standardı EAN-13 (tek boyutlu lineer barkod) ve QR Code (iki boyutlu matris barkod) teknolojileridir. Bu yazıda, her iki sistemin teknik altyapısını, üretim süreçlerini ve yazılım entegrasyonlarını detaylı şekilde inceleyeceğiz.

EAN-13 Barkod Sistemi

EAN-13 Nedir?

EAN-13 (European Article Number), 13 haneli numerik bir barkod standardıdır. Dünya genelinde perakende ürünlerde kullanılan en yaygın barkod formatıdır. Her EAN-13 barkodu şu bileşenlerden oluşur:

  • Ülke kodu (2-3 hane): Türkiye için 869 ön eki kullanılır.
  • Firma kodu (4-5 hane): GS1 Türkiye tarafından firmalara atanır.
  • Ürün kodu (3-5 hane): Firma tarafından her ürüne özel belirlenir.
  • Kontrol hanesi (1 hane): Modül 10 algoritmasıyla hesaplanan doğrulama rakamıdır.

Kontrol Hanesi Hesaplama Algoritması

EAN-13 barkodunun son hanesi, ilk 12 hanenin doğruluğunu kontrol etmek için kullanılır. Hesaplama şu şekilde yapılır:

  1. Tek pozisyondaki rakamlar (1., 3., 5., ...) 1 ile çarpılır.
  2. Çift pozisyondaki rakamlar (2., 4., 6., ...) 3 ile çarpılır.
  3. Tüm sonuçlar toplanır.
  4. Toplam 10'a bölünür ve kalan bulunur.
  5. Kontrol hanesi = (10 - kalan) % 10

Python ile kontrol hanesi hesaplama örneği:

def ean13_kontrol_hanesi(ilk_12_hane: str) -> str:
    if len(ilk_12_hane) != 12 or not ilk_12_hane.isdigit():
        raise ValueError("Tam olarak 12 rakam girilmelidir.")
    
    toplam = 0
    for i, rakam in enumerate(ilk_12_hane):
        carpan = 1 if i % 2 == 0 else 3
        toplam += int(rakam) * carpan
    
    kontrol = (10 - (toplam % 10)) % 10
    return ilk_12_hane + str(kontrol)

# Örnek kullanım
barkod = ean13_kontrol_hanesi("869123456789")
print(f"EAN-13 Barkod: {barkod}")  # 869123456789X (X = hesaplanan hane)

QR Code Sistemi

QR Code'un Avantajları

QR Code (Quick Response Code), 1994 yılında Denso Wave tarafından geliştirilmiş iki boyutlu bir barkod formatıdır. EAN-13'e kıyasla çok daha fazla veri depolayabilir:

  • Numerik veri: Maksimum 7.089 karakter
  • Alfanumerik veri: Maksimum 4.296 karakter
  • Binary veri: Maksimum 2.953 byte
  • Hata düzeltme: L (%7), M (%15), Q (%25), H (%30) seviyelerinde Reed-Solomon hata düzeltme desteği

Python ile QR Code Üretimi

qrcode ve Pillow kütüphanelerini kullanarak QR Code üretebilirsiniz:

import qrcode
from qrcode.constants import ERROR_CORRECT_H

def qr_code_olustur(veri: str, dosya_adi: str = "qrcode.png"):
    qr = qrcode.QRCode(
        version=1,
        error_correction=ERROR_CORRECT_H,
        box_size=10,
        border=4,
    )
    qr.add_data(veri)
    qr.make(fit=True)
    
    img = qr.make_image(fill_color="black", back_color="white")
    img.save(dosya_adi)
    print(f"QR Code '{dosya_adi}' olarak kaydedildi.")

# Ürün bilgisi içeren QR Code
urun_verisi = "https://urun.example.com/detay?sku=TR-869-00123&lot=2026A"
qr_code_olustur(urun_verisi, "urun_qr.png")

Barkod Okuma ve Doğrulama

Üretilen barkodların okunması ve doğrulanması, sistemin en kritik aşamasıdır. Python'da pyzbar kütüphanesi hem EAN-13 hem de QR Code okuma desteği sunar:

from pyzbar.pyzbar import decode
from PIL import Image

def barkod_oku(gorsel_yolu: str):
    img = Image.open(gorsel_yolu)
    sonuclar = decode(img)
    
    for sonuc in sonuclar:
        barkod_tipi = sonuc.type   # EAN13, QRCODE vb.
        veri = sonuc.data.decode("utf-8")
        print(f"Tip: {barkod_tipi} | Veri: {veri}")
    
    return sonuclar

barkod_oku("urun_qr.png")

Veritabanı Entegrasyonu

Ürün-Barkod İlişkilendirme Şeması

Barkod sistemini bir veritabanına entegre ederken, ürün ve barkod bilgilerini ilişkilendiren bir şema tasarlamak gerekir. Aşağıda PostgreSQL için örnek bir tablo yapısı verilmiştir:

CREATE TABLE urunler (
    id SERIAL PRIMARY KEY,
    urun_adi VARCHAR(255) NOT NULL,
    ean13 CHAR(13) UNIQUE,
    qr_verisi TEXT,
    kategori VARCHAR(100),
    fiyat NUMERIC(10, 2),
    stok_adedi INTEGER DEFAULT 0,
    olusturma_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_ean13 ON urunler(ean13);
CREATE INDEX idx_kategori ON urunler(kategori);

-- Barkod tarama logları
CREATE TABLE tarama_loglari (
    id SERIAL PRIMARY KEY,
    urun_id INTEGER REFERENCES urunler(id),
    tarama_zamani TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    islem_tipi VARCHAR(20) CHECK (islem_tipi IN ('giris', 'cikis', 'sayim')),
    kullanici VARCHAR(100)
);

REST API Entegrasyonu

Flask ile basit bir barkod sorgulama API'si oluşturabilirsiniz:

from flask import Flask, jsonify, request
import psycopg2

app = Flask(__name__)

def db_baglantisi():
    return psycopg2.connect(
        host="localhost", database="barkod_db",
        user="app_user", password="güvenli_sifre"
    )

@app.route("/api/urun/<ean13>", methods=["GET"])
def urun_sorgula(ean13):
    if len(ean13) != 13 or not ean13.isdigit():
        return jsonify({"hata": "Geçersiz EAN-13 formatı"}), 400
    
    conn = db_baglantisi()
    cur = conn.cursor()
    cur.execute(
        "SELECT urun_adi, fiyat, stok_adedi FROM urunler WHERE ean13 = %s",
        (ean13,)
    )
    satir = cur.fetchone()
    cur.close()
    conn.close()
    
    if satir is None:
        return jsonify({"hata": "Ürün bulunamadı"}), 404
    
    return jsonify({
        "urun_adi": satir[0],
        "fiyat": float(satir[1]),
        "stok": satir[2]
    })

Fiziksel Barkod Yazıcı Entegrasyonu

Endüstriyel ortamlarda barkod etiketleri genellikle ZPL (Zebra Programming Language) destekleyen termal yazıcılarla basılır. ZPL ile EAN-13 barkod etiketi oluşturma örneği:

def zpl_ean13_etiketi(ean13: str, urun_adi: str) -> str:
    return f"""
^XA
^FO50,50^A0N,30,30^FD{urun_adi}^FS
^FO50,100^BY2^BEN,80,Y,N^FD{ean13}^FS
^FO50,220^A0N,20,20^FDEAN: {ean13}^FS
^XZ
"""

# Yazıcıya gönderme (ağ üzerinden)
import socket

def yaziciya_gonder(zpl: str, ip: str = "192.168.1.100", port: int = 9100):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((ip, port))
        s.sendall(zpl.encode("utf-8"))

Güvenlik ve Doğrulama Önerileri

  • QR Code içeriğini doğrulayın: Kullanıcıdan gelen QR verisini işlemeden önce URL whitelist kontrolü ve input sanitization uygulayın. Kötü amaçlı QR kodları zararlı URL'lere yönlendirebilir.
  • EAN-13 kontrol hanesini her zaman doğrulayın: Veritabanına kaydetmeden önce Modül 10 kontrolü yapın.
  • Barkod tekrarını engelleyin: Veritabanında UNIQUE kısıtlaması kullanarak aynı EAN-13 kodunun birden fazla ürüne atanmasını önleyin.
  • Tarama loglarını tutun: Her barkod okuma işlemini zaman damgası, kullanıcı ve işlem tipiyle birlikte kaydedin. Bu veriler hem stok takibi hem de denetim için kritik önem taşır.
  • Hata düzeltme seviyesini ortama göre seçin: Endüstriyel ortamlarda etiketler yıpranabileceği için QR Code üretirken ERROR_CORRECT_H (en yüksek) seviyesini tercih edin.

Sonuç

Barkod sistemi kurulumu, doğru standart seçimi, güvenilir yazılım entegrasyonu ve fiziksel altyapının uyumlu çalışmasını gerektirir. EAN-13 perakende ürün tanımlama için endüstri standardını oluştururken, QR Code zengin veri taşıma kapasitesiyle lojistik, pazarlama ve dijital deneyim alanlarında öne çıkar. Yukarıdaki kod örneklerini kendi projenize uyarlayarak, Python ekosistemi içinde uçtan uca bir barkod yönetim sistemi kurabilirsiniz. Üretimden okumaya, veritabanı kaydından etiket basımına kadar tüm süreçleri otomatize etmek, operasyonel verimliliği önemli ölçüde artıracaktır.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç