Aui va la rutina de digito verificador de Permisos de Embarque y/o Despachos
a plaza.
VERSION SQL
===========
Create FUNCTION [dbo].[CalculaDigVerif]
(
@PeDpIng char(16)
)
RETURNS Char(1)
AS
BEGIN
declare @PeDp as char(16)
declare @Sum as integer
declare @Result char(1)
declare @Div as integer
declare @Rest as char(1)
declare @Dv as char(1)
declare @DvOrig as char(1)
Set @PeDp=@PeDpIng
set @DvOrig=char(ascii(ltrim(rtrim(substring(@PeDp,16,1)))))
set @sum=ascii(ltrim(rtrim(substring(@PeDp,1,1))))+
ascii(ltrim(rtrim(substring(@PeDp,2,1))))+
ascii(ltrim(rtrim(substring(@PeDp,3,1))))+
ascii(ltrim(rtrim(substring(@PeDp,4,1))))+
ascii(ltrim(rtrim(substring(@PeDp,5,1))))+
ascii(ltrim(rtrim(substring(@PeDp,6,1))))+
ascii(ltrim(rtrim(substring(@PeDp,7,1))))+
ascii(ltrim(rtrim(substring(@PeDp,8,1))))+
ascii(ltrim(rtrim(substring(@PeDp,9,1))))+
ascii(ltrim(rtrim(substring(@PeDp,10,1))))+
ascii(ltrim(rtrim(substring(@PeDp,11,1))))+
ascii(ltrim(rtrim(substring(@PeDp,12,1))))+
ascii(ltrim(rtrim(substring(@PeDp,13,1))))+
ascii(ltrim(rtrim(substring(@PeDp,14,1))))+
ascii(ltrim(rtrim(substring(@PeDp,15,1))))
set @div=@sum/23
set @Rest=char(@sum-(@div*23)+65)
set @Dv= case
when @Rest='O' THEN 'Y'
when @Rest='I' THEN 'X'
when @Rest='Q' THEN 'Z'
ELSE @Rest
end
if(@Dv=@DvOrig )
Begin
set @Result=@DvOrig -- OK
END
else
BEGIN
set @Result =@Dv -- MALLLLLL
END
if(char(ascii(ltrim(rtrim(substring(@PeDp,1,1)))))='C')
begin
set @Result ='' -- OK
end
Return @Result
end
VERSION VB6
===========
Public Function GetDigVerif(PE As String) As String
Dim i As Long
Dim j As Long
Dim s As String
PE = Trim(UCase(PE))
If Mid(PE, 1, 1) = "C" Then
If Len(PE) = 16 Then
s = Mid(PE, 16, 1)
Else
s = "_LongErronea" & Len(PE)
End If
Else
For i = 1 To Len(PE) - 1
j = j + Asc(Mid(PE, i, 1))
Next
s = Chr((j Mod 23) + 65)
Select Case s
Case "O"
s = "Y"
Case "I"
s = "X"
Case "Q"
s = "Z"
End Select
End If
GetDigVerif = s
End Function
=========================
Espero que les sirva, retornna el digito verificador, debe coincidir con el
ultimo digito del permiso o despacho.
Daniel Calvin
El 26 de febrero de 2011 12:46, <[email protected]> escribió:
> Hola Sergio
>
> El despacho a plaza tiene 16 posiciones alfanumericas.
> El ultimo caracter es un digito verificados ( alfabetico )
> Luego tiene otras cosas que podes validar.
> Te puedo pasar la rutina de validacion, la tengo en VB6 y en transac de
> MSSQL.
>
> El resto no se que decirte.
>
> Daniel Calvin
>
> ------Mensaje original------
> De: Sergio D.Castellari
> Remitente: [email protected]
> Para: GUFA List Member
> Responder a: [email protected]
> Asunto: [GUFA] Sistemas de Importacion y Droguerias...
> Enviado: 26 de feb, 2011 00:14
>
> Hola gente,
>
> Tengo las siguientes dudas:
>
> 1.- Que tipo de campo y tamaño utilizan para guardar los N° de despachos de
> Aduanas (Argentina)
> 2.- Me consultaron para un sistema de una Droguería, y entre otros temas
> hay
> uno que me confundió y necesitaria alguna explicación de algun conocedor:
> Resulta que hacen Facturas 'A' SIN IVA discriminado!!!..segun sus dueños
> por
> que son emisores EXENTOS de IVA...o algo asi...!!!???...osea los
> medicamentos tienen IVA incluido pero no pueden Discriminarlos al
> venderlos,
> aun siendo Resp.Inscrito a Resp.Inscripto. ¿Esto es correcto? ¿alguien me
> puede orientar? ¿Como debo tratarlos en el libro Iva Ventas?
>
> Saludos,
> Sergio Castellari
>
> __________________________________________________
> Correo Yahoo!
> Espacio para todos tus mensajes, antivirus y antispam ?gratis!
> ?Abr? tu cuenta ya! - http://correo.yahoo.com.ar
>
>
>
> Enviado desde mi BlackBerry de Movistar (http://www.movistar.com.ar)
>
--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional