- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 19 anos, 3 meses atrás por Marcio68Almeida.
-
AutorPosts
-
15 de setembro de 2005 às 4:32 pm #74563Anônimo
Achei essa fun??o em VB … mas precisava passar pra PL/sql .. alguem poderia me ajudar please
Public Function ChecaInscrE(pUF As String, pInscr As String)ChecaInscrE = False
Dim strBase As String
Dim strBase2 As String
Dim strOrigem As String
Dim strDigito1 As String
Dim strDigito2 As String
Dim intPos As Integer
Dim intValor As Integer
Dim intSoma As Integer
Dim intResto As Integer
Dim intNumero As Integer
Dim intPeso As Integer
Dim intDig As IntegerstrBase = “”
strBase2 = “”
strOrigem = “”
If Trim(pInscr) = “ISENTO” Then
ChecaInscrE = True
Exit Function
End If
For intPos = 1 To Len(Trim(pInscr))
If InStr(1, “0123456789P”, Mid$(pInscr, intPos, 1), vbTextCompare) > 0 Then
strOrigem = strOrigem & Mid$(pInscr, intPos, 1)
End If
Next
Select Case pUF
Case “AC” ‘ Acre
strBase = Left(Trim(strOrigem) & “000000000”, 9)
If Left(strBase, 2) = “01” And Mid$(strBase, 3, 2) <> “00” Then
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "AL" ' Alagoas strBase = Left(Trim(strOrigem) & "000000000", 9) If Left(strBase, 2) = "24" Then intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intSoma = intSoma * 10 intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto = 10, "0", str(intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "AM" ' Amazonas strBase = Left(Trim(strOrigem) & "000000000", 9) intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next If intSoma < 11 Then strDigito1 = Right(str(11 - intSoma), 1) Else intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) End If strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "AP" ' Amapa strBase = Left(Trim(strOrigem) & "000000000", 9) intPeso = 0 intDig = 0 If Left(strBase, 2) = "03" Then intNumero = Val(Left(strBase, 8) ) If intNumero >= 3000001 And _
intNumero <= 3017000 Then intPeso = 5 intDig = 0 ElseIf intNumero >= 3017001 And _
intNumero <= 3019022 Then intPeso = 9 intDig = 1 ElseIf intNumero >= 3019023 Then
intPeso = 0
intDig = 0
End If
intSoma = intPeso
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 – intResto
If intValor = 10 Then
intValor = 0
ElseIf intValor = 11 Then
intValor = intDig
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case “BA” ‘ Bahia
strBase = Left(Trim(strOrigem) & “00000000”, 8)
If InStr(1, “0123458”, Left(strBase, 1), vbTextCompare) > 0 Then
intSoma = 0
For intPos = 1 To 6
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (8 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 10
strDigito2 = Right(IIf(intResto = 0, “0”, str(10 – intResto)), 1)
strBase2 = Left(strBase, 6) & strDigito2
intSoma = 0
For intPos = 1 To 7
intValor = Val(Mid$(strBase2, intPos, 1))
intValor = intValor * (9 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 10
strDigito1 = Right(IIf(intResto = 0, “0”, str(10 – intResto)), 1)
Else
intSoma = 0
For intPos = 1 To 6
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (8 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 6) & strDigito2 intSoma = 0 For intPos = 1 To 7 intValor = Val(Mid$(strBase2, intPos, 1)) intValor = intValor * (9 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) End If strBase2 = Left(strBase, 6) & strDigito1 & strDigito2 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "CE" ' Ceara strBase = Left(Trim(strOrigem) & "000000000", 9) intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 intValor = 11 - intResto If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “DF” ‘ Distrito Federal
strBase = Left(Trim(strOrigem) & “0000000000000”, 13)
If Left(strBase, 3) = “073” Then
intSoma = 0
intPeso = 2
For intPos = 11 To 1 Step -1
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 11) & strDigito1 intSoma = 0 intPeso = 2 For intPos = 12 To 1 Step -1 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 12) & strDigito2 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "ES" ' Espirito Santo strBase = Left(Trim(strOrigem) & "000000000", 9) intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "GO" ' Goias strBase = Left(Trim(strOrigem) & "000000000", 9) If InStr(1, "10,11,15", Left(strBase, 2), vbTextCompare) > 0 Then
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
If intResto = 0 Then
strDigito1 = “0”
ElseIf intResto = 1 Then
intNumero = Val(Left(strBase, 8) )
strDigito1 = Right(IIf(intNumero >= 10103105 And intNumero <= 10119997, "1", "0"), 1) Else strDigito1 = Right(str(11 - intResto), 1) End If strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "MA" ' Maranh?o strBase = Left(Trim(strOrigem) & "000000000", 9) If Left(strBase, 2) = "12" Then intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "MT" ' Mato Grosso strBase = Left(Trim(strOrigem) & "0000000000", 10) intSoma = 0 intPeso = 2 For intPos = 10 To 1 Step -1 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 10) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "MS" ' Mato Grosso do Sul strBase = Left(Trim(strOrigem) & "000000000", 9) If Left(strBase, 2) = "28" Then intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "MG" ' Minas Gerais strBase = Left(Trim(strOrigem) & "0000000000000", 13) strBase2 = Left(strBase, 3) & "0" & Mid$(strBase, 4, 8) intNumero = 2 For intPos = 1 To 12 intValor = Val(Mid$(strBase2, intPos, 1)) intNumero = IIf(intNumero = 2, 1, 2) intValor = intValor * intNumero If intValor > 9 Then
strDigito1 = Format(intValor, “00”)
intValor = Val(Left(strDigito1, 1)) + _
Val(Right(strDigito1, 1))
End If
intSoma = intSoma + intValor
Next
intValor = intSoma
While Right(Format(intValor, “000”), 1) <> “0”
intValor = intValor + 1
Wend
strDigito1 = Right(Format(intValor – intSoma, “00”), 1)
strBase2 = Left(strBase, 11) & strDigito1
intSoma = 0
intPeso = 2
For intPos = 12 To 1 Step -1
intValor = Val(Mid$(strBase2, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 11 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = strBase2 & strDigito2 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "PA" ' Para strBase = Left(Trim(strOrigem) & "000000000", 9) If Left(strBase, 2) = "15" Then intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If Case "PB" ' Paraiba strBase = Left(Trim(strOrigem) & "000000000", 9) intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 intValor = 11 - intResto If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “PE” ‘ Pernambuco
strBase = Left(Trim(strOrigem) & “00000000000000”, 14)
intSoma = 0
intPeso = 2
For intPos = 13 To 1 Step -1
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
intValor = 11 – intResto
If intValor > 9 Then
intValor = intValor – 10
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 13) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “PI” ‘ Piaui
strBase = Left(Trim(strOrigem) & “000000000”, 9)
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "PR" ' Parana strBase = Left(Trim(strOrigem) & "0000000000", 10) intSoma = 0 intPeso = 2 For intPos = 8 To 1 Step -1 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 intSoma = 0 intPeso = 2 For intPos = 9 To 1 Step -1 intValor = Val(Mid$(strBase2, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = strBase2 & strDigito2 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "RJ" ' Rio de Janeiro strBase = Left(Trim(strOrigem) & "00000000", 8) intSoma = 0 intPeso = 2 For intPos = 7 To 1 Step -1 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 7) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "RN" ' Rio Grande do Norte strBase = Left(Trim(strOrigem) & "000000000", 9) If Left(strBase, 2) = "20" Then intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intSoma = intSoma * 10 intResto = intSoma Mod 11 strDigito1 = Right(IIf(intResto > 9, “0”, str(intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case “RO” ‘ Rondonia
strBase = Left(Trim(strOrigem) & “000000000”, 9)
strBase2 = Mid$(strBase, 4, 5)
intSoma = 0
For intPos = 1 To 5
intValor = Val(Mid$(strBase2, intPos, 1))
intValor = intValor * (7 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 – intResto
If intValor > 9 Then
intValor = intValor – 10
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “RR” ‘ Roraima
strBase = Left(Trim(strOrigem) & “000000000”, 9)
If Left(strBase, 2) = “24” Then
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 9
strDigito1 = Right(str(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case “RS” ‘ Rio Grande do Sul
strBase = Left(Trim(strOrigem) & “0000000000”, 10)
intNumero = Val(Left(strBase, 3))
If intNumero > 0 And intNumero < 468 Then intSoma = 0 intPeso = 2 For intPos = 9 To 1 Step -1 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * intPeso intSoma = intSoma + intValor intPeso = intPeso + 1 If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
intValor = 11 – intResto
If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 9) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case “SC” ‘ Santa Catarina
strBase = Left(Trim(strOrigem) & “000000000”, 9)
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 8) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If Case "SE" ' Sergipe strBase = Left(Trim(strOrigem) & "000000000", 9) intSoma = 0 For intPos = 1 To 8 intValor = Val(Mid$(strBase, intPos, 1)) intValor = intValor * (10 - intPos) intSoma = intSoma + intValor Next intResto = intSoma Mod 11 intValor = 11 - intResto If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(str(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “SP” ‘ S?o Paulo
If Left(strOrigem, 1) = “P” Then
strBase = Left(Trim(strOrigem) & “0000000000000”, 13)
strBase2 = Mid$(strBase, 2, 8)
intSoma = 0
intPeso = 1
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso = 2 Then
intPeso = 3
End If
If intPeso = 9 Then
intPeso = 10
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(str(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1 & Mid$(strBase, 11, 3)
Else
strBase = Left(Trim(strOrigem) & “000000000000”, 12)
intSoma = 0
intPeso = 1
For intPos = 1 To 8
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso = 2 Then
intPeso = 3
End If
If intPeso = 9 Then
intPeso = 10
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(str(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1 & Mid$(strBase, 10, 2)
intSoma = 0
intPeso = 2
For intPos = 11 To 1 Step -1
intValor = Val(Mid$(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 10 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(str(intResto), 1)
strBase2 = strBase2 & strDigito2
End If
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case “TO” ‘ Tocantins
strBase = Left(Trim(strOrigem) & “00000000000”, 11)
If InStr(1, “01,02,03,99”, Mid$(strBase, 3, 2), vbTextCompare) > 0 Then
strBase2 = Left(strBase, 2) & Mid$(strBase, 5, 6)
intSoma = 0
For intPos = 1 To 8
intValor = Val(Mid$(strBase2, intPos, 1))
intValor = intValor * (10 – intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", str(11 - intResto)), 1) strBase2 = Left(strBase, 10) & strDigito1 If strBase2 = strOrigem Then ChecaInscrE = True End If End If End Select End Function15 de setembro de 2005 às 5:13 pm #74564Marcio68AlmeidaParticipanteQual ? exatamente a sua d?vida ???
Qual parte da fun??o voc? n?o consegue passar para PL/SQL ???15 de setembro de 2005 às 6:47 pm #74565AnônimoEntao marcio .. eu gostaria de saber se tem um afunc??o paraecida PL/sql… ou se alguem consegue fazer a conversao de linguagens
obrigada
15 de setembro de 2005 às 7:54 pm #74566Marcio68AlmeidaParticipanteN?o conhe?o nenhuma ferramenta que transcreva fun??es de alguma linguagem para o Oracle…
Acho que voc? vai ter que reescrever, n?o vejo nenhuma funcionalidade complexa que n?o possa ser reproduzida numa fun??o ou procedure do Oracle…
Alias, n?o consegui identificar o que faz essa fun??o, ? algum verificador de d?gito de controle ou algo parecido ???
J? procurou no http://www.google.com.br se n?o existe no Oracle uma fun??o similar ??? -
AutorPosts
- Você deve fazer login para responder a este tópico.