AccessTr.neT

Tam Versiyon: Maskeleme
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Merhaba arkadaşlar Rapor1 adlı raporda Adi_Soyadi adlı metin kutusunda maskeleme yapmaktayım "=Left([Adi_Soyadi];3) & "********"" kodunu kullandım örneğin Evren Yorgancı ismini "Evr**********" olarak maskeledi. fakat ben maskelemeyi Evr** Yor***** olarak yapmasını istiyorum. Yardımcı Olabilirmisiniz.?
Dim fullName As String
Dim firstName As String
Dim lastName As String
Dim spacePos As Integer

' Tam ismi almak
fullName = Me.Liste376.Column(7)

' Boşluk konumunu bulmak
spacePos = InStr(fullName, " ")

' İlk isim ve soyisimi ayırmak
If spacePos > 0 Then
firstName = Left(fullName, spacePos - 1)
lastName = Mid(fullName, spacePos + 1)
Else
firstName = fullName
lastName = ""
End If

' Maskeleme işlemi
If Len(firstName) > 3 Then
firstName = Left(firstName, 3) & "**"
Else
firstName = firstName & "**"
End If

If Len(lastName) > 3 Then
lastName = Left(lastName, 3) & "*****"
Else
lastName = lastName & "*****"
End If

' Sonuç
Me.txtSoyadi = firstName & " " & lastName
Kod:
n = Left(Adi_Soyadi, 3) & "********"
k = InStr(Adi_Soyadi, " ")
c = Mid(Adi_Soyadi, k + 1, 3)
m = n & " " & c & "********"
Me.txtSonuc = m
Sayın @C*e*l*o*y*c*e ve Sayın @onur_can Hocalarımızın tavsiye ettiği kodlara ek olarak yapmak istediğiniz isim uzunluğu kadar ve Ad - Soyadı ayrı ayrı maskelemek gördüğüm kadarı ile. Bu durumda 2 adı veya 2 soyadı olanlar için ne olacak sorusu sorulmalı?

Örneğin raporunuza Masked_Adi Soyadi adlı bir textbox ekleyip Adi_Soyadi adlı textboxı sadece kontrol için kullanırsanız mesela Report Open olayında şöyle bir kod kullanılabilir:
    Dim AdSoyad As String, Ad1 As String, Ad2 As String, Soyad As String
    Dim Ad1Maske As String, Ad2Maske As String, SoyadMaske As String
    Dim Spacing As Integer
   
    AdSoyad = Me.Adi_Soyadi
    Spacing = InStr(AdSoyad, " ")

    If Spacing > 0 Then
        '2 Ad veya 2 Soyad varsa durumu
        Ad1 = Left(AdSoyad, Spacing - 1)    'İlk adı ayırır
        AdSoyad = Mid(AdSoyad, Spacing + 1)
        Spacing = InStr(AdSoyad, " ")

    If Spacing > 0 Then
        Ad2 = Left(AdSoyad, Spacing - 1)    'İkinci adı ve soyadı ayırır
        Soyad = Mid(AdSoyad, Spacing + 1)
            Ad1Maske = Left(Ad1, 3) & String(Len(Ad1) - 3, "*")    'Ad1 için maskeleme yapar
            Ad2Maske = Left(Ad2, 3) & String(Len(Ad2) - 3, "*")    'Ad2 için maskeleme yapar
            SoyadMaske = Left(Soyad, 3) & String(Len(Soyad) - 3, "*")    'Soyad için maskeleme yapar
            Me.Masked_Adi_Soyadi = Ad1Maske & " " & Ad2Maske & " " & SoyadMaske    'Sonuçları birleştirip yazar
        Else
            'Sadece 1 Ad ve 1 Soyad varsa durumu
            Ad2 = AdSoyad
            Ad2Maske = Left(Ad2, 3) & String(Len(Ad2) - 3, "*")
            Me.Masked_Adi_Soyadi = Ad1Maske & " " & Ad2Maske
        End If
    Else
        'Eğer boşluk yoksa tam ad olarak kabul ederek sadece adı maskeleme durumu
        Me.Masked_Adi_Soyadi = Left(AdSoyad, 3) & String(Len(AdSoyad) - 3, "*")
    End If
End Sub

Ancak maskelemede güvenlik için isim uzunluğu kadar bir maskeleme yapmak yerine belirli bir formatta maskeleme yapmak, Ayrıca ilk 3 karakter  yerine 1 veya 2. karakterden sonra maskeleme yapmak daha doğrudur, zira üç harften yola çıkarak isim uzunluğundan tahminde bulunmak kolaydır ve ayrıca 3 harfli isimler maskelenmeden gösterilir. Bu hususlara dikkat etmeniz gerekli.
C*e*l*o*y*c*e, onur_can, atoykan ve diğer yardımcı olan tüm üstatlarımızın desteklerinden dolayı teşekkür ederim.