Soru Benzersiz qr kod üretiminin sınırlı olmasına nasıl bir çözüm getirilebilir?

  • Konuyu başlatan Konuyu başlatan kozmix
  • Başlangıç tarihi Başlangıç tarihi

kozmix

Asistan
Katılım
30 Ağustos 2023
Mesajlar
347
Çözümler
7
Reaksiyon puanı
71
Puanları
28
Qr koadlar herkes tarafından benzersiz olarak düşünülüyor. Bu doğru fakat benzersizliklerinin bir sonu var.

Örneğin 177x177 modüllü bir qr kod türü en fazla 2 üzer 31.329 kere benzersiz şekilde tasarlanabilir ve daha fazla benzersiz tasarım için qr kod boyutu büyütülmelidir tabi bu sayının tükenmesi pratikte imkansızdır fakat ben soruda teoriden yola çıkıyorum.



Eğer her tükenmede qr kod boyutu büyütülürse bir zaman sonra çok büyük kodlar olacağından başka bir yöntem geliştirilmelidir.



Sadece 177x177 modüllü qr kod türünün sonsuz benzerlikte tasarlanabilmesi için ne gibi çözümler uygulanabilir?



Benim aklıma her qr kodu oluştururken kod içeriğine oluşturulma konumu, oluşturulma tarihi, oluşturulduğu cihaz idsi gibi verileri işlemek geldi.

Mesela bu şekilde tıpatıp aynı kodlar olsa bile aynı konum, tarih ve idnin tutması pratikte bile imkansız olduğundan sorun çözülebilir.

Fakat bu yöntemin ne kadar uygulanabilir olduğunu bilmiyorum çünkü tıpatıp aynı olan kodlara bu verileri işlersek iki koda da aynı veri işlenebilir.



Alternatif ve daha mantıklı çözüm önerileriniz varsa yazarsanız sevinirim😊



Öneriler pratikte uygulanamaz olsa bile teoride uygulanabilir şeyler olursa daha iyi olur.
 

Developer

admin
Yönetici
Katılım
27 Şubat 2020
Mesajlar
506
Çözümler
1
Reaksiyon puanı
1,596
Puanları
158
Üretilen tüm kodlara random UUID ekle.

Örnek QR çıktısına = 1 diyelim.
UUID olarak da = 347483753487 verelim.

Tekrardan bir QR oluşturalım ve bunun da çıktısına = 1 diyelim.
UUID olarak da = 409095469564 verelim.

QR kod çıktısı 1 olsa da UUID farklı olduğu için üretilen kod benzersiz olacaktır. Üretilen QR değil random üretilen UUID sorgulanır. QR kod sadece çıktı için kullanılır.
 

kozmix

Asistan
Katılım
30 Ağustos 2023
Mesajlar
347
Çözümler
7
Reaksiyon puanı
71
Puanları
28
Üretilen tüm kodlara random UUID ekle.

Örnek QR çıktısına = 1 diyelim.
UUID olarak da = 347483753487 verelim.

Tekrardan bir QR oluşturalım ve bunun da çıktısına = 1 diyelim.
UUID olarak da = 409095469564 verelim.

QR kod çıktısı 1 olsa da UUID farklı olduğu için üretilen kod benzersiz olacaktır. Üretilen QR değil random üretilen UUID sorgulanır. QR kod sadece çıktı için kullanılır.
UUID işlemini düşündüm fakat teoride bu şekilde de sınırsız olmuyor çünkü UUID'lerin belirli bir kombinasyon sınırı var
 

AlhsomK

Öğrenci
Katılım
9 Ocak 2025
Mesajlar
12
Reaksiyon puanı
3
Puanları
3
Üretilen tüm kodlara random UUID ekle.

Örnek QR çıktısına = 1 diyelim.
UUID olarak da = 347483753487 verelim.

Tekrardan bir QR oluşturalım ve bunun da çıktısına = 1 diyelim.
UUID olarak da = 409095469564 verelim.

QR kod çıktısı 1 olsa da UUID farklı olduğu için üretilen kod benzersiz olacaktır. Üretilen QR değil random üretilen UUID sorgulanır. QR kod sadece çıktı için kullanılır. Burayı kontrol edin
UUID'yi oluşturmak için kriptografik bir hash fonksiyonu kullanmayı da düşünebilirsiniz. Bu, UUID'yi daha da benzersiz hale getirecektir
 

Developer

admin
Yönetici
Katılım
27 Şubat 2020
Mesajlar
506
Çözümler
1
Reaksiyon puanı
1,596
Puanları
158
Uuid numarasının belirli bir hane sayısı var ve teoride o da tükenebilir bir şey. Yani yine sonsuz qr kod olmuyor

Hayır, hiç bir şekilde tükenmez. Teorik olarak bu imkansız zaten. Sonsuz döngüde istediğin karakter sayısında UID oluşturabilirsiniz. Bu rakam da olabilir, sayı da olabilir ya da ikisi karışık olabilir.

Basit bir program (Claude.AI)

ilk UUID zaten yeterli olacaktır ama senin teorinden yola çıkacak olursak her UUID altına sonsuz ID + QR oluşacak. Bir sona geldiğinde (o sona hiç bir zaman gelmez) diyelim ki geldi: bu sefer many to many ilişkisi devreye girecek ve UUID 1 ile UUID 2 eşleşecek. Hem UUID hem de QR sonsuz şekilde oluşacak. UUID 2 de bitti mi: 3 4 5 (sonsuza kadar gider). Her UUID altında sonsuz bir döngü her UUID bir önceki UUID ile many to many ile eşleşir.

Bunun rakamını sana veremem. Sonsuz ne demekse o.

Python:
import uuid
import qrcode
from datetime import datetime
import sqlite3
import random
from itertools import combinations

class UUIDManyToManyGenerator:
    def __init__(self, db_name='uuid_relations.db'):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.setup_database()
 
    def setup_database(self):
        # UUID'leri saklamak için ana tablo
        self.cursor.execute('''
        CREATE TABLE IF NOT EXISTS uuids (
            id INTEGER PRIMARY KEY,
            uuid_value TEXT UNIQUE,
            created_at TIMESTAMP
        )''')
    
        # Many-to-many ilişki tablosu
        self.cursor.execute('''
        CREATE TABLE IF NOT EXISTS uuid_relations (
            uuid1_id INTEGER,
            uuid2_id INTEGER,
            relation_type TEXT,
            created_at TIMESTAMP,
            FOREIGN KEY (uuid1_id) REFERENCES uuids (id),
            FOREIGN KEY (uuid2_id) REFERENCES uuids (id),
            UNIQUE(uuid1_id, uuid2_id)
        )''')
    
        self.conn.commit()
 
    def generate_uuid_batch(self, count=1000):
        """Belirtilen sayıda UUID üretir ve veritabanına kaydeder"""
        uuids = []
        for _ in range(count):
            new_uuid = str(uuid.uuid4())
            self.cursor.execute(
                "INSERT INTO uuids (uuid_value, created_at) VALUES (?, ?)",
                (new_uuid, datetime.now())
            )
            uuids.append(new_uuid)
        self.conn.commit()
        return uuids
 
    def create_random_relations(self, relation_count=1000):
        """UUID'ler arasında rastgele ilişkiler oluşturur"""
        self.cursor.execute("SELECT id FROM uuids")
        uuid_ids = [row[0] for row in self.cursor.fetchall()]
    
        relations_created = 0
        relation_types = ['primary', 'secondary', 'tertiary']
    
        while relations_created < relation_count:
            uuid1_id = random.choice(uuid_ids)
            uuid2_id = random.choice(uuid_ids)
        
            if uuid1_id != uuid2_id:
                try:
                    self.cursor.execute("""
                    INSERT INTO uuid_relations (uuid1_id, uuid2_id, relation_type, created_at)
                    VALUES (?, ?, ?, ?)
                    """, (uuid1_id, uuid2_id, random.choice(relation_types), datetime.now()))
                    relations_created += 1
                except sqlite3.IntegrityError:
                    continue
                
        self.conn.commit()
 
    def generate_qr_for_relation(self, uuid1_id, uuid2_id):
        """İlişkilendirilmiş UUID'ler için QR kod üretir"""
        self.cursor.execute("""
        SELECT u1.uuid_value, u2.uuid_value, r.relation_type
        FROM uuid_relations r
        JOIN uuids u1 ON r.uuid1_id = u1.id
        JOIN uuids u2 ON r.uuid2_id = u2.id
        WHERE r.uuid1_id = ? AND r.uuid2_id = ?
        """, (uuid1_id, uuid2_id))
    
        relation = self.cursor.fetchone()
        if relation:
            qr = qrcode.QRCode(version=1, box_size=10, border=4)
            qr.add_data(f"UUID1: {relation[0]}\nUUID2: {relation[1]}\nRelation: {relation[2]}")
            qr.make(fit=True)
            qr_image = qr.make_image(fill_color="black", back_color="white")
            filename = f"relation_qr_{uuid1_id}_{uuid2_id}.png"
            qr_image.save(filename)
            return filename
        return None
 
    def get_statistics(self):
        """Veritabanı istatistiklerini döndürür"""
        self.cursor.execute("SELECT COUNT(*) FROM uuids")
        uuid_count = self.cursor.fetchone()[0]
    
        self.cursor.execute("SELECT COUNT(*) FROM uuid_relations")
        relation_count = self.cursor.fetchone()[0]
    
        return {
            'total_uuids': uuid_count,
            'total_relations': relation_count,
            'theoretical_max_relations': (uuid_count * (uuid_count - 1)) // 2
        }
 
    def close(self):
        self.conn.close()

# Kullanım örneği
if __name__ == "__main__":
    generator = UUIDManyToManyGenerator()
 
    # 1000 UUID üret
    print("UUID'ler üretiliyor...")
    uuids = generator.generate_uuid_batch(1000)
 
    # 2000 rastgele ilişki oluştur
    print("İlişkiler oluşturuluyor...")
    generator.create_random_relations(2000)
 
    # İstatistikleri göster
    stats = generator.get_statistics()
    print("\nİstatistikler:")
    print(f"Toplam UUID sayısı: {stats['total_uuids']}")
    print(f"Toplam ilişki sayısı: {stats['total_relations']}")
    print(f"Teorik maksimum ilişki sayısı: {stats['theoretical_max_relations']}")
 
    generator.close()
 
Son düzenleme:

kozmix

Asistan
Katılım
30 Ağustos 2023
Mesajlar
347
Çözümler
7
Reaksiyon puanı
71
Puanları
28
UUID'yi oluşturmak için kriptografik bir hash fonksiyonu kullanmayı da düşünebilirsiniz. Bu, UUID'yi daha da benzersiz hale getirecektir
Kriptografik hash fonksiyonunu nasıl yapabilirim ve uuidyi qr koda nasıl entegre edebilirim özelden veya buradan açıklar mısınız
Mesaj otomatik birleştirildi:

Hayır, hiç bir şekilde tükenmez. Teorik olarak bu imkansız zaten. Sonsuz döngüde istediğin karakter sayısında UID oluşturabilirsiniz. Bu rakam da olabilir, sayı da olabilir ya da ikisi karışık olabilir.

Basit bir program (Claude.AI)

ilk UUID zaten yeterli olacaktır ama senin teorinden yola çıkacak olursak her UUID altına sonsuz ID + QR oluşacak. Bir sona geldiğinde (o sona hiç bir zaman gelmez) diyelim ki geldi: bu sefer many to many ilişkisi devreye girecek ve UUID 1 ile UUID 2 eşleşecek. Hem UUID hem de QR sonsuz şekilde oluşacak. UUID 2 de bitti mi: 3 4 5 (sonsuza kadar gider). Her UUID altında sonsuz bir döngü her UUID bir önceki UUID ile many to many ile eşleşir.

Bunun rakamını sana veremem. Sonsuz ne demekse o.

Python:
import uuid
import qrcode
from datetime import datetime
import sqlite3
import random
from itertools import combinations

class UUIDManyToManyGenerator:
    def __init__(self, db_name='uuid_relations.db'):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.setup_database()
 
    def setup_database(self):
        # UUID'leri saklamak için ana tablo
        self.cursor.execute('''
        CREATE TABLE IF NOT EXISTS uuids (
            id INTEGER PRIMARY KEY,
            uuid_value TEXT UNIQUE,
            created_at TIMESTAMP
        )''')
   
        # Many-to-many ilişki tablosu
        self.cursor.execute('''
        CREATE TABLE IF NOT EXISTS uuid_relations (
            uuid1_id INTEGER,
            uuid2_id INTEGER,
            relation_type TEXT,
            created_at TIMESTAMP,
            FOREIGN KEY (uuid1_id) REFERENCES uuids (id),
            FOREIGN KEY (uuid2_id) REFERENCES uuids (id),
            UNIQUE(uuid1_id, uuid2_id)
        )''')
   
        self.conn.commit()
 
    def generate_uuid_batch(self, count=1000):
        """Belirtilen sayıda UUID üretir ve veritabanına kaydeder"""
        uuids = []
        for _ in range(count):
            new_uuid = str(uuid.uuid4())
            self.cursor.execute(
                "INSERT INTO uuids (uuid_value, created_at) VALUES (?, ?)",
                (new_uuid, datetime.now())
            )
            uuids.append(new_uuid)
        self.conn.commit()
        return uuids
 
    def create_random_relations(self, relation_count=1000):
        """UUID'ler arasında rastgele ilişkiler oluşturur"""
        self.cursor.execute("SELECT id FROM uuids")
        uuid_ids = [row[0] for row in self.cursor.fetchall()]
   
        relations_created = 0
        relation_types = ['primary', 'secondary', 'tertiary']
   
        while relations_created < relation_count:
            uuid1_id = random.choice(uuid_ids)
            uuid2_id = random.choice(uuid_ids)
       
            if uuid1_id != uuid2_id:
                try:
                    self.cursor.execute("""
                    INSERT INTO uuid_relations (uuid1_id, uuid2_id, relation_type, created_at)
                    VALUES (?, ?, ?, ?)
                    """, (uuid1_id, uuid2_id, random.choice(relation_types), datetime.now()))
                    relations_created += 1
                except sqlite3.IntegrityError:
                    continue
               
        self.conn.commit()
 
    def generate_qr_for_relation(self, uuid1_id, uuid2_id):
        """İlişkilendirilmiş UUID'ler için QR kod üretir"""
        self.cursor.execute("""
        SELECT u1.uuid_value, u2.uuid_value, r.relation_type
        FROM uuid_relations r
        JOIN uuids u1 ON r.uuid1_id = u1.id
        JOIN uuids u2 ON r.uuid2_id = u2.id
        WHERE r.uuid1_id = ? AND r.uuid2_id = ?
        """, (uuid1_id, uuid2_id))
   
        relation = self.cursor.fetchone()
        if relation:
            qr = qrcode.QRCode(version=1, box_size=10, border=4)
            qr.add_data(f"UUID1: {relation[0]}\nUUID2: {relation[1]}\nRelation: {relation[2]}")
            qr.make(fit=True)
            qr_image = qr.make_image(fill_color="black", back_color="white")
            filename = f"relation_qr_{uuid1_id}_{uuid2_id}.png"
            qr_image.save(filename)
            return filename
        return None
 
    def get_statistics(self):
        """Veritabanı istatistiklerini döndürür"""
        self.cursor.execute("SELECT COUNT(*) FROM uuids")
        uuid_count = self.cursor.fetchone()[0]
   
        self.cursor.execute("SELECT COUNT(*) FROM uuid_relations")
        relation_count = self.cursor.fetchone()[0]
   
        return {
            'total_uuids': uuid_count,
            'total_relations': relation_count,
            'theoretical_max_relations': (uuid_count * (uuid_count - 1)) // 2
        }
 
    def close(self):
        self.conn.close()

# Kullanım örneği
if __name__ == "__main__":
    generator = UUIDManyToManyGenerator()
 
    # 1000 UUID üret
    print("UUID'ler üretiliyor...")
    uuids = generator.generate_uuid_batch(1000)
 
    # 2000 rastgele ilişki oluştur
    print("İlişkiler oluşturuluyor...")
    generator.create_random_relations(2000)
 
    # İstatistikleri göster
    stats = generator.get_statistics()
    print("\nİstatistikler:")
    print(f"Toplam UUID sayısı: {stats['total_uuids']}")
    print(f"Toplam ilişki sayısı: {stats['total_relations']}")
    print(f"Teorik maksimum ilişki sayısı: {stats['theoretical_max_relations']}")
 
    generator.close()
Çok teşekkürler yardım için efendim
Mesaj otomatik birleştirildi:

@AlhsomK açıklamaya gerek kalmadı efendim @Developer her şeyi açıklamış
Mesaj otomatik birleştirildi:

@Developer efendim uuid olayını anladım. Şimid şöyle bir sorun daha var. Belli bir süre sonra QR kod boyutları artmaya ve karmaşıklaşmaya başlayacak. Ekte belirttiğim 2 qr kodun arasındaki boyut farkı gibi bir fark oluşmaya başlayacak. Şorum ise burada başlıyor. Ekteki daha az karmaşık olan qr kod boyutunu sabit tutarak sizin söylediğiniz uuid yöntemini uygulamanın bir yolu var mı yoksa belli bir kod üretimi sonunda boyutlar da büyümeye başlar mı?
 

Ekli dosyalar

  • hovercode (1)_1.png
    hovercode (1)_1.png
    759.1 KB · Görüntüleme: 8
  • hovercode (2)_1.png
    hovercode (2)_1.png
    777.1 KB · Görüntüleme: 8
Son düzenleme:

Developer

admin
Yönetici
Katılım
27 Şubat 2020
Mesajlar
506
Çözümler
1
Reaksiyon puanı
1,596
Puanları
158
Basit,

1. UUID'yi kısaltıyoruz - örneğin ilk 8 karakterini alıyoruz
2. QR kodun version'unu 1'de sabitliyoruz (en küçük boyut)
3. Hata düzeltme seviyesini minimum tutuyoruz.

Yani kısaca UUID'yi akıllıca kırpıp, QR kodu da en minimal halde tutuyoruz. Bu sayede UUID sayısı ne olursa olsun QR kodların boyutu ilk resimde gösterdiğin gibi küçük ve düzenli kalıyor.
 

kozmix

Asistan
Katılım
30 Ağustos 2023
Mesajlar
347
Çözümler
7
Reaksiyon puanı
71
Puanları
28
Basit,

1. UUID'yi kısaltıyoruz - örneğin ilk 8 karakterini alıyoruz
2. QR kodun version'unu 1'de sabitliyoruz (en küçük boyut)
3. Hata düzeltme seviyesini minimum tutuyoruz.

Yani kısaca UUID'yi akıllıca kırpıp, QR kodu da en minimal halde tutuyoruz. Bu sayede UUID sayısı ne olursa olsun QR kodların boyutu ilk resimde gösterdiğin gibi küçük ve düzenli kalıyor.
Uuid sayısını kısalttığımızda bu sefer uuid sayılarının sonsuz olma özelliğini kaybetmiş olmaz mıyız. Çünkü bu yöntemle hane sınırlaması getirmiş oluyoruz.
 
Üst