'**************************************************************** Code for Full Name Matching Developed by : Technical Team, Election Commission of India, New Delhi. '************************************************************* Dim firstName1 As String Dim LastName1 As String Dim MiddleName1 As String Dim firstName2 As String Dim LastName2 As String Dim MiddleName2 As String Dim FCharFName1 As Char Dim FCharLName1 As Char Dim FCharMName1 As Char Dim FCharFName2 As Char Dim FCharLName2 As Char Dim FCharMName2 As Char Dim FirstIsInitial1 As Boolean Dim LastIsInitial1 As Boolean Dim MiddleIsInitial1 As Boolean Dim FirstIsInitial2 As Boolean Dim LastIsInitial2 As Boolean Dim MiddleIsInitial2 As Boolean Dim FirstIsword1 As Boolean Dim LastIsword1 As Boolean Dim FirstIsword2 As Boolean Dim LastIsword2 As Boolean Dim firstPer As Decimal Dim lastPer As Decimal Dim middlePer As Decimal Dim objAmin As New AMIN.AMIN Dim string1 As String Dim string2 As String Dim arrstring1() As String Dim arrstring2() As String Function NameMatch(ByVal string1 As String, ByVal string2 As String) As Decimal If firstName1 = firstName2 Then firstPer = 100 ElseIf FirstIsInitial1 Or FirstIsInitial2 Then If FCharFName1 <> FCharFName2 Then Return 0 Else firstPer = 90 End If Else firstPer = objAmin.AMIN_percentage(firstName1, firstName2) If firstPer < 90 Then Return 0 End If End If If LastName1 = "" And LastName2 = "" Then Return firstPer ElseIf LastName1 = "" Or LastName2 = "" Then Return (0.8 * firstPer) Else If LastName1 = LastName2 Then lastPer = 100 ElseIf LastIsInitial1 Or LastIsInitial2 Then If FCharLName1 <> FCharLName2 Then Return 0 Else lastPer = 90 End If Else lastPer = objAmin.AMIN_percentage(LastName1, LastName2) If lastPer < 90 Then If arrstring1.Length <> arrstring2.Length Then lastPer = objAmin.AMIN_percentage(LastName1, MiddleName2) If lastPer < 90 Then lastPer = objAmin.AMIN_percentage(LastName2, MiddleName1) If lastPer < 90 Then Return 0 Else Return (0.9 * ((firstPer * lastPer) / 100)) End If Else Return (0.9 * ((firstPer * lastPer) / 100)) End If Else Return 0 End If End If End If End If If MiddleName1 = MiddleName2 Then Return (firstPer * lastPer) / 100 ElseIf MiddleName1 = "" Or MiddleName2 = "" Then Return 0.8 * ((firstPer * lastPer) / 100) ElseIf MiddleIsInitial1 Or MiddleIsInitial2 Then If FCharMName1 <> FCharMName2 Then Return 0 Else middlePer = 90 End If Else middlePer = objAmin.AMIN_percentage(MiddleName1, MiddleName2) If middlePer < 70 Then Return 0 End If End If Return (firstPer * lastPer * middlePer) / 10000 End Function Private Sub uibtnOriginal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles uibtnOriginal.Click uilblPer.Text = "" FirstIsInitial1 = False FirstIsword1 = False FirstIsInitial2 = False FirstIsword2 = False LastIsInitial1 = False LastIsword1 = False LastIsInitial2 = False LastIsword2 = False string1 = Trim(UCase(uitxtSource.Text)) string2 = Trim(UCase(uitxtTarget.Text)) If string1 = string2 Then uilblPer.Text = 100 Exit Sub ElseIf string1.Replace(" ", "") = string2.Replace(" ", "") Then uilblPer.Text = 99.5 Exit Sub End If arrstring1 = string1.Split(" ") arrstring2 = string2.Split(" ") firstName1 = arrstring1(0) firstName2 = arrstring2(0) FCharFName1 = string1.Substring(0, 1) FCharFName2 = string2.Substring(0, 1) If arrstring1.Length > 1 Then LastName1 = arrstring1(UBound(arrstring1)) Else LastName1 = "" End If If arrstring2.Length > 1 Then LastName2 = arrstring2(UBound(arrstring2)) Else LastName2 = "" End If Dim i As Integer MiddleName1 = "" MiddleName2 = "" For i = 1 To arrstring1.Length - 2 MiddleName1 = MiddleName1 & arrstring1(i) Next MiddleName1 = Trim(MiddleName1) For i = 1 To arrstring2.Length - 2 MiddleName2 = MiddleName2 & arrstring2(i) Next MiddleName2 = Trim(MiddleName2) If arrstring1.Length > 1 Then FCharLName1 = LastName1.Substring(0, 1) Else FCharLName1 = "" End If If arrstring2.Length > 1 Then FCharLName2 = LastName2.Substring(0, 1) Else FCharLName2 = "" End If If MiddleName1 <> "" And MiddleName2 <> "" Then FCharMName1 = MiddleName1.Substring(0, 1) FCharMName2 = MiddleName2.Substring(0, 1) Else FCharMName1 = "" FCharMName2 = "" End If If Len(firstName1) = 1 Then FirstIsInitial1 = True Else FirstIsword1 = True End If If Len(MiddleName1) = 1 Then MiddleIsInitial1 = True End If If Len(MiddleName2) = 1 Then MiddleIsInitial2 = True End If If Len(firstName2) = 1 Then FirstIsInitial2 = True Else FirstIsword2 = True End If If Len(LastName1) = 1 Then LastIsInitial1 = True Else LastIsword1 = True End If If Len(LastName2) = 1 Then LastIsInitial2 = True Else LastIsword2 = True End If Dim final_per As Decimal final_per = Math.Round(NameMatch(string1, string2), 0) If final_per = 0 And chkReordering.Checked = True Then final_per = Math.Round(MatchAfterReordering(arrstring1, arrstring2), 0) If final_per <> 0 Then final_per = Math.Round((100 - (((100 - final_per) / 44) * 10)), 2) End If ElseIf final_per <> 0 Then final_per = Math.Round((100 - (((100 - final_per) / 44) * 10)), 2) End If uilblPer.Text = final_per End Sub Function MatchAfterReordering(ByVal arrstring1() As String, ByVal arrstring2() As String) As Decimal If Len(arrstring1(0)) > 1 And Len(arrstring2(0)) > 1 Then If firstName1 = LastName2 Then firstPer = 100 Else firstPer = objAmin.AMIN_percentage(firstName1, LastName2) If firstPer < 90 Then Return 0 End If End If If LastName1 = firstName2 Then lastPer = 100 Else lastPer = objAmin.AMIN_percentage(LastName1, firstName2) If lastPer < 90 Then Return 0 End If End If If MiddleName1 = MiddleName2 Then Return 0.9 * (firstPer * lastPer) / 100 ElseIf MiddleName1 = "" Or MiddleName2 = "" Then Return 0.8 * ((firstPer * lastPer) / 100) ElseIf MiddleIsInitial1 Or MiddleIsInitial2 Then If FCharMName1 <> FCharMName2 Then Return 0 Else middlePer = 90 End If Else middlePer = objAmin.AMIN_percentage(MiddleName1, MiddleName2) If middlePer < 70 Then Return 0 End If End If Return 0.9 * (firstPer * lastPer * middlePer) / 10000 End If End Function