Function Soundex(LastName As String)
Dim i As Integer, j As Integer, Str_Len As Integer
Dim SCode As String, PrevCode As String, strResult As String, CharTemp As String * 1
If LastName = "" Then
Soundex = ""
Exit Function
End If
If Len(LastName) < 3 Then
Soundex = LastName
Exit Function
End If
LastName = Get_Name(LastName)
Str_Len = Len(LastName)
j = 0
i = 0
PrevCode = "0"
Do While (i < Str_Len And j < 4)
i = i + 1
CharTemp = Mid$(LastName, i, 1)
Select Case CharTemp
Case "R"
SCode = "6"
Case "M", "N"
SCode = "5"
Case "L"
SCode = "4"
Case "D", "T"
SCode = "3"
Case "C", "G", "J", "K", "Q", "S", "X", "Z"
SCode = "2"
Case "B", "F", "P", "V"
SCode = "1"
Case Else
SCode = "0"
End Select
If CharTemp = "H" Or CharTemp = "W" Then
SCode = PrevCode
End If
If (SCode > "0" Or j = 0) Then
If (SCode <> PrevCode Or j = 0) Then
strResult = strResult + SCode
j = j + 1
End If
End If
If j = 0 Then
j = j + 1
End If
PrevCode = SCode
Loop
i = j
Do While (i <= 4)
strResult = strResult + "0"
i = i + 1
Loop
Soundex = Left(LastName, 1) + Mid$(strResult, 2, 3)
End Function
'------------------------------------------------
' |
' This function gets the name and cleans it up |
' so that it can be soundexed. |
' |
'------------------------------------------------
Function Get_Name(inLastName As String) As String
Dim i As Integer, Str_Len As Integer
Dim LastName As String, Str1 As String, Str2 As String, ch As String * 1, inString As String
inString = UCase$(Trim(inLastName))
Str_Len = Len(inString)
If (Mid$(inString, 1, 3) = "ST.") Then
inString = "SAINT" + Right$(inString, Str_Len - 3)
Str_Len = Str_Len + 2
End If
If (Mid$(inString, 1, 3) = "ST ") Then
inString = "SAINT" + Right$(inString, Str_Len - 3)
Str_Len = Str_Len + 2
End If
For i = 1 To Str_Len
ch = Mid$(inString, i, 1)
If (ch >= "A" And ch <= "Z") Then
LastName = LastName + ch
End If
If ch = "," Then
i = Str_Len
End If
Next i
Get_Name = LastName
End Function