Criei um Função em VB.Net que valida a CNH segue.
Public Shared Function ValidaCNH(ByVal CNH As String) As Boolean
Dim retorno As Boolean
Dim j, Mult, Soma, Digito1, Digito2, Incr_dig2 As Integer
Dim CNH_Forn, Dig_Forn, Dig_Enc As String
If CNH.Trim.Length < 11 Then Return False
CNH_Forn = CNH.Substring(0, 9)
Dig_Forn = CNH.Substring(9, 2)
Incr_dig2 = 0
Soma = 0
Mult = 9
For j = 0 To 8
Soma = Soma + (CInt(CNH_Forn.Substring(j, 1)) * Mult)
Mult = Mult - 1
Next
Digito1 = Soma Mod 11
If Digito1 = 10 Then Incr_dig2 = -2
If Digito1 > 9 Then Digito1 = 0
Soma = 0
Mult = 1
For j = 0 To 8
Soma = Soma + (CInt(CNH_Forn.Substring(j, 1)) * Mult)
Mult = Mult + 1
Next
If (Soma Mod 11) + Incr_dig2 < 0 Then Digito2 = 11 + (Soma Mod 11) + Incr_dig2
If (Soma Mod 11) + Incr_dig2 >= 0 Then Digito2 = (Soma Mod 11) + Incr_dig2
If Digito2 > 9 Then Digito2 = 0
Dig_Enc = CStr(Digito1) & CStr(Digito2)
If Dig_Forn = Dig_Enc Then retorno = True Else retorno = False
Return retorno
End Function
Agora é so adequar para a Linguagem que você precisa e mandar ver.
Abraços