FUN?ÃO PARA VALIDAR PIS
Olá pessoal,
Fiz uma função para validar o numero do PIS, mas está dando erro, o digito verificador não tem o valor que é necessário, por isto estou colocando a minha função neste tópico para que me ajudem a descobrir onde eu erro.
Public Function ValidaPIS2(ByVal zcampo As String) As String
Dim zresult, zresto, zdig11, zok, zpis1, zpis2, zpis3, zpis4, zpis5, zpis6, zpis7, zpis8, zpis9, zpis10, zpis11 As Integer
zpis1 = Val(Mid(zcampo, 1, 1)) * 3
zpis2 = Val(Mid(zcampo, 2, 1)) * 2
zpis3 = Val(Mid(zcampo, 3, 1)) * 9
zpis4 = Val(Mid(zcampo, 4, 1)) * 8
zpis5 = Val(Mid(zcampo, 5, 1)) * 7
zpis6 = Val(Mid(zcampo, 6, 1)) * 6
zpis7 = Val(Mid(zcampo, 7, 1)) * 5
zpis8 = Val(Mid(zcampo, 8, 1)) * 4
zpis9 = Val(Mid(zcampo, 9, 1)) * 3
zpis10 = Val(Mid(zcampo, 10, 1)) * 2
zpis11 = Val(Mid(zcampo, 11, 1))
zresult = zpis1 + zpis2 + zpis3 + zpis4 + zpis5 + zpis6 + zpis7 + zpis8 + zpis9 + zpis10
zresto = CInt(zresult Mod 11)
zresto = 11 - zresto
zdig11 = If(zresto > 9, 0, zresto)
zok = True
If zdig11 <> zpis11 Then
zok = False
End If
Return (zok)
End Function
No meu FORM utilizo assim:
Private Sub Txt_PisFunc_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Txt_PisFunc.KeyPress
If e.KeyChar = Convert.ToChar(Keys.Enter) Then
e.Handled = True
Dim Grv_Fun As String
Dim dx As MySqlDataReader
Grv_Fun = [Ô]SELECT * FROM empregado where pis = [ô][Ô] & Me.Txt_PisFunc.Text & [Ô][ô][Ô]
Dim ProConn As New MySqlConnection(StrServFun01)
Dim ProCmd As New MySqlCommand(Grv_Fun, ProConn)
ProConn.Open()
dx = ProCmd.ExecuteReader
If dx.Read Then
MsgBox([Ô]PIS já Cadastrado para [Ô] & dx.Item([Ô]nome[Ô]))
Me.Txt_PisFunc.Clear()
Me.Txt_PisFunc.Focus()
Else
If ValidaPIS2(Me.Txt_PisFunc.Text) = False Then
MsgBox([Ô]PIS cadastrado não confere[Ô])
Me.Txt_PisFunc.Focus()
Else
Me.Txt_PisFunc.MaxLength = 12
Me.Txt_PisFunc.Text = FormataPIS(Me.Txt_PisFunc.Text)
End If
End If
End If
End Sub
Public Function FormataPIS(ByVal xcampo As String) As String
If xcampo <> [Ô][Ô] Then
xcampo = Mid(xcampo, 1, 3) & [Ô].[Ô] & Mid(xcampo, 4, 4) & [Ô].[Ô] & Mid(xcampo, 8, 4) & [Ô]-[Ô] & Mid(xcampo, 11, 1)
Else
xcampo = [Ô][Ô]
End If
Return xcampo
End Function
No caso estou utilizando o seguinte nº de PIS 11111111116, veja que o digito verificador é 6, mas quando rodo o validador que fiz sempre me retorna um outro numero tipo 7, ai dá erro.
Se alguém puder me ajudar ficarei muito grato.
Obrigado.
Fiz uma função para validar o numero do PIS, mas está dando erro, o digito verificador não tem o valor que é necessário, por isto estou colocando a minha função neste tópico para que me ajudem a descobrir onde eu erro.
Public Function ValidaPIS2(ByVal zcampo As String) As String
Dim zresult, zresto, zdig11, zok, zpis1, zpis2, zpis3, zpis4, zpis5, zpis6, zpis7, zpis8, zpis9, zpis10, zpis11 As Integer
zpis1 = Val(Mid(zcampo, 1, 1)) * 3
zpis2 = Val(Mid(zcampo, 2, 1)) * 2
zpis3 = Val(Mid(zcampo, 3, 1)) * 9
zpis4 = Val(Mid(zcampo, 4, 1)) * 8
zpis5 = Val(Mid(zcampo, 5, 1)) * 7
zpis6 = Val(Mid(zcampo, 6, 1)) * 6
zpis7 = Val(Mid(zcampo, 7, 1)) * 5
zpis8 = Val(Mid(zcampo, 8, 1)) * 4
zpis9 = Val(Mid(zcampo, 9, 1)) * 3
zpis10 = Val(Mid(zcampo, 10, 1)) * 2
zpis11 = Val(Mid(zcampo, 11, 1))
zresult = zpis1 + zpis2 + zpis3 + zpis4 + zpis5 + zpis6 + zpis7 + zpis8 + zpis9 + zpis10
zresto = CInt(zresult Mod 11)
zresto = 11 - zresto
zdig11 = If(zresto > 9, 0, zresto)
zok = True
If zdig11 <> zpis11 Then
zok = False
End If
Return (zok)
End Function
No meu FORM utilizo assim:
Private Sub Txt_PisFunc_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Txt_PisFunc.KeyPress
If e.KeyChar = Convert.ToChar(Keys.Enter) Then
e.Handled = True
Dim Grv_Fun As String
Dim dx As MySqlDataReader
Grv_Fun = [Ô]SELECT * FROM empregado where pis = [ô][Ô] & Me.Txt_PisFunc.Text & [Ô][ô][Ô]
Dim ProConn As New MySqlConnection(StrServFun01)
Dim ProCmd As New MySqlCommand(Grv_Fun, ProConn)
ProConn.Open()
dx = ProCmd.ExecuteReader
If dx.Read Then
MsgBox([Ô]PIS já Cadastrado para [Ô] & dx.Item([Ô]nome[Ô]))
Me.Txt_PisFunc.Clear()
Me.Txt_PisFunc.Focus()
Else
If ValidaPIS2(Me.Txt_PisFunc.Text) = False Then
MsgBox([Ô]PIS cadastrado não confere[Ô])
Me.Txt_PisFunc.Focus()
Else
Me.Txt_PisFunc.MaxLength = 12
Me.Txt_PisFunc.Text = FormataPIS(Me.Txt_PisFunc.Text)
End If
End If
End If
End Sub
Public Function FormataPIS(ByVal xcampo As String) As String
If xcampo <> [Ô][Ô] Then
xcampo = Mid(xcampo, 1, 3) & [Ô].[Ô] & Mid(xcampo, 4, 4) & [Ô].[Ô] & Mid(xcampo, 8, 4) & [Ô]-[Ô] & Mid(xcampo, 11, 1)
Else
xcampo = [Ô][Ô]
End If
Return xcampo
End Function
No caso estou utilizando o seguinte nº de PIS 11111111116, veja que o digito verificador é 6, mas quando rodo o validador que fiz sempre me retorna um outro numero tipo 7, ai dá erro.
Se alguém puder me ajudar ficarei muito grato.
Obrigado.
Veja se esse aqui resolve o teu problema:
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If
ftap = [Ô]3298765432[Ô]
total = 0
For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i
resto = Int(total Mod 11)
If resto <> 0 Then
resto = 11 - resto
End If
If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = False
Exit Function
End If
PISPASEP = True
End Function
Public Function PISPASEP(numero As String)
Dim ftap As String
Dim total As String
Dim i As Integer
Dim resto As Integer
If Val(numero) = 0 Or Len(numero) <> 11 Then
PISPASEP = False
Exit Function
End If
ftap = [Ô]3298765432[Ô]
total = 0
For i = 1 To 10
total = total + Val(Mid(numero, i, 1)) * Val(Mid(ftap, i, 1))
Next i
resto = Int(total Mod 11)
If resto <> 0 Then
resto = 11 - resto
End If
If resto <> Val(Mid(numero, 11, 1)) Then
PISPASEP = False
Exit Function
End If
PISPASEP = True
End Function
public static class ValidaPis
{
public static bool IsPis(string pis)
{
int[] multiplicador = new int[10] { 3,2,9,8,7,6,5,4,3,2 };
int soma;
int resto;
if (pis.Trim().Length != 11)
return false;
pis = pis.Trim();
pis = pis.Replace([Ô]-[Ô], [Ô][Ô]).Replace([Ô].[Ô], [Ô][Ô]).PadLeft(11, [ô]0[ô]);
soma = 0;
for (int i = 0; i < 10; i++)
soma += int.Parse(pis[i].ToString()) * multiplicador[i];
resto = soma % 11;
if ( resto < 2 )
resto = 0;
else
resto = 11 - resto;
return pis.EndsWith(resto.ToString());
}
}
{
public static bool IsPis(string pis)
{
int[] multiplicador = new int[10] { 3,2,9,8,7,6,5,4,3,2 };
int soma;
int resto;
if (pis.Trim().Length != 11)
return false;
pis = pis.Trim();
pis = pis.Replace([Ô]-[Ô], [Ô][Ô]).Replace([Ô].[Ô], [Ô][Ô]).PadLeft(11, [ô]0[ô]);
soma = 0;
for (int i = 0; i < 10; i++)
soma += int.Parse(pis[i].ToString()) * multiplicador[i];
resto = soma % 11;
if ( resto < 2 )
resto = 0;
else
resto = 11 - resto;
return pis.EndsWith(resto.ToString());
}
}
Tópico encerrado , respostas não são mais permitidas