Tout et n'importe quoi ...(de préférence)

Blog de CLT-Services : vie de l'entreprise et infos pratiques

Sql Serveur 2005 UDF pour vérifier le numéro SIRET

Thursday, 13 August 2009 09:57 by adrian

Le numéro SIRET intègre le mécanisme de contrôle de parité connu sous le nom de formule (ou clé) de Luhn. Ce contrôle de parité peut être utilisé pour réduire les risques d'erreurs de frappe ou de transmission. L'algorithme consiste à parcourir les chiffres constituant le numéro SIREN, NIC ou SIRET, à multiplier par 2 les chiffres de rang impair et à faire ensuite la somme de tous les chiffres obtenus. Attention, il s'agit bien de faire la somme des chiffres obtenus : si après multiplication par 2 d'un des chiffres du numéro on obtient "12", il faudra ajouter les chiffres 1 puis 2 et non le nombre 12 (ou Somme-9 implémenté ci-dessous). Le contrôle de parité est correct si le résultat obtenu est un multiple de 10.

Ci-dessous une fonction Sql Serveur qui implémente cet algorithme :

 

create function dbo.Siret_ok(@siret varchar(24))

       returns bit

as

begin

        declare @Position tinyint

        declare @tmp int

        declare @Cumul_Siret int

        declare @Siret_valide bit

        set @Siret_valide = 0;

        set @Cumul_Siret = 1;

        If Len(@Siret)=14

        begin

             set @Cumul_Siret = 0;

             set @position=1

             while @position<=14

             begin

                    if @position % 2 = 0

                    begin

                           set @tmp = cast(substring(@siret,@position,1) as int);

                    end

                    else

                    begin

                           set @tmp = cast(substring(@siret,@position,1) as int) * 2;

                           if (@tmp > 9)

                           begin

                                  set @tmp = @tmp - 9;

                           end

                    end

                    set @Cumul_Siret = @Cumul_Siret + @tmp;

                    set @position=@position+1

             end

             set @Siret_valide=(case when @Cumul_Siret % 10 = 0 then 1 else 0 end);

       end   

       return (@Siret_valide)    

end

go

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   ,
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Related posts

Add comment


(Will show your Gravatar icon)  

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

July 29. 2010 17:04

Search