Один из способов уменьшить сложность задачи состоит в том, чтобы иметь sh имен в виде отсортированной строки строчных букв с удаленными дублирующимися символами, пробелами и гласными. Затем вы можете сравнить хэшированные имена, чтобы определить сходство. В приведенном ниже примере нам повезло, что мы получили точные совпадения, но было бы невозможно написать еще одну функцию, которая проверяла бы, отличаются ли хэшированные имена на один, два или более символов, и фактически, что исходные имена были разумным соответствием.
Option Explicit
Private Type State
CharArray As Variant
End Type
Private s As State
Public Sub test()
Initialise
Debug.Print "Ahmed mohammed Saleh", ConvertNameToHash("Ahmed mohammed Saleh")
Debug.Print "Ahmed Mohamed Salah", ConvertNameToHash("Ahmed Mohamed Salah")
Debug.Print "Waleed Khalid Ali", ConvertNameToHash("Waleed Khalid Ali")
Debug.Print "Waleed Ali Khalid", ConvertNameToHash("Waleed Ali Khalid")
End Sub
Public Sub Initialise()
s.CharArray = Split("b,c,d,f,g,h,j,k,l,m,n,p,q,r,s,t,v,w,x,y,z", ",")
End Sub
Public Function ConvertNameToHash(ByVal ipName As String) As String
Dim myChars As String
Dim myName As String
myName = LCase$(ipName)
Dim myChar As Variant
For Each myChar In s.CharArray
If InStr(myName, myChar) > 0 Then
myChars = myChars & myChar
End If
Next
ConvertNameToHash = myChars
End Function
Выход из вышеприведенного кода был
Ahmed mohammed Saleh dhlms
Ahmed Mohamed Salah dhlms
Waleed Khalid Ali dhklw
Waleed Ali Khalid dhklw