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

Responder a