Rumah > pembangunan bahagian belakang > Tutorial Python > Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django

Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django

Mary-Kate Olsen
Lepaskan: 2024-11-07 20:59:02
asal
399 orang telah melayarinya

Implémentation d

Jarak Levenshtein boleh digunakan dalam sistem pengesanan penipuan untuk membandingkan data yang dimasukkan pengguna (seperti nama, alamat atau e-mel) dengan data sedia ada untuk mengenal pasti entri yang serupa tetapi berpotensi penipuan.

Berikut ialah panduan langkah demi langkah untuk menyepadukan fungsi ini ke dalam projek Django anda.


1. Kes Penggunaan

Sistem pengesanan penipuan boleh membandingkan:

  • E-mel serupa: untuk mengesan akaun yang dibuat dengan sedikit variasi (mis., user@example.com lwn. userr@example.com).
  • Alamat Berdekatan: Untuk menyemak sama ada berbilang akaun menggunakan alamat yang hampir sama.
  • Nama Serupa: untuk melihat pengguna dengan nama yang diubah suai sedikit (cth., John Doe lwn. Jon Doe).

2. Langkah-Langkah Pelaksanaan

a. Cipta Peranti Tengah atau Isyarat untuk Menganalisis Data

Gunakan isyarat Django untuk menyemak data pengguna baharu semasa pendaftaran atau kemas kini.

b. Pasang Fungsi Pengiraan Levenshtein

Sepadukan perpustakaan untuk mengira jarak Levenshtein atau gunakan fungsi Python seperti ini:

from django.db.models import Q
from .models import User  # Assume User is your user model

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    if n > m:
        a, b = b, a
        n, m = m, n

    current_row = range(n + 1)  # Keep current and previous row
    for i in range(1, m + 1):
        previous_row, current_row = current_row, [i] + [0] * n
        for j in range(1, n + 1):
            add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
            if a[j - 1] != b[i - 1]:
                change += 1
            current_row[j] = min(add, delete, change)

    return current_row[n]
Salin selepas log masuk
Salin selepas log masuk

c. Tambah Ciri Pengesanan Penipuan

Dalam isyarat atau perisian tengah anda, bandingkan data yang dimasukkan dengan data dalam pangkalan data untuk mencari entri yang serupa.

from django.db.models import Q
from .models import User  # Assume User is your user model

def detect_similar_entries(email, threshold=2):
    users = User.objects.filter(~Q(email=email))  # Exclure l'utilisateur actuel
    similar_users = []

    for user in users:
        distance = levenshtein_distance(email, user.email)
        if distance <= threshold:
            similar_users.append((user, distance))

    return similar_users
Salin selepas log masuk

d. Sambung ke Signal post_save untuk Pengguna

Gunakan isyarat post_save untuk menjalankan semakan ini selepas pengguna mendaftar atau mengemas kini:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User
from .utils import detect_similar_entries  # Import your function

@receiver(post_save, sender=User)
def check_for_fraud(sender, instance, **kwargs):
    similar_users = detect_similar_entries(instance.email)

    if similar_users:
        print(f"Potential fraud detected for {instance.email}:")
        for user, distance in similar_users:
            print(f" - Similar email: {user.email}, Distance: {distance}")
Salin selepas log masuk

e. Pilihan: Tambah Templat Log Penipuan

Untuk menjejaki penipuan yang disyaki, anda boleh mencipta model FraudLog:

from django.db import models
from django.contrib.auth.models import User

class FraudLog(models.Model):
    suspicious_user = models.ForeignKey(User, related_name='suspicious_logs', on_delete=models.CASCADE)
    similar_user = models.ForeignKey(User, related_name='similar_logs', on_delete=models.CASCADE)
    distance = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
Salin selepas log masuk

Simpan padanan yang mencurigakan dalam templat ini:

from django.db.models import Q
from .models import User  # Assume User is your user model

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    if n > m:
        a, b = b, a
        n, m = m, n

    current_row = range(n + 1)  # Keep current and previous row
    for i in range(1, m + 1):
        previous_row, current_row = current_row, [i] + [0] * n
        for j in range(1, n + 1):
            add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
            if a[j - 1] != b[i - 1]:
                change += 1
            current_row[j] = min(add, delete, change)

    return current_row[n]
Salin selepas log masuk
Salin selepas log masuk

3. Penambahbaikan dan Pengoptimuman

a. Hadkan Perbandingan

  • Bandingkan hanya pengguna terbaharu atau mereka dari rantau, syarikat, dsb. yang sama

b. Laraskan Ambang

  • Tetapkan ambang berbeza untuk jarak yang boleh diterima bergantung pada medan (contohnya, ambang 1 untuk e-mel, 2 untuk nama).

c. Penggunaan Algoritma Lanjutan

  • Terokai perpustakaan seperti RapidFuzz untuk pengiraan yang dioptimumkan.

d. Integrasi ke dalam Django Admin

  • Tambah makluman dalam antara muka pentadbir untuk pengguna yang mempunyai potensi risiko penipuan.

4. Kesimpulan

Dengan pendekatan ini, anda telah melaksanakan sistem pengesanan penipuan berdasarkan jarak Levenshtein. Ia membantu mengenal pasti entri serupa, mengurangkan risiko mencipta akaun penipuan atau menduplikasi data. Sistem ini boleh dikembangkan dan boleh dilaraskan untuk memenuhi keperluan khusus projek anda.

Atas ialah kandungan terperinci Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan