首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查SIRET和SIREN (法国企业编号)

检查SIRET和SIREN (法国企业编号)
EN

Stack Overflow用户
提问于 2017-12-31 19:38:04
回答 1查看 309关注 0票数 0

T-SQL中是否有控制SIRET或SIREN的函数?此函数使用与Here类似的卢恩算法

EN

回答 1

Stack Overflow用户

发布于 2017-12-31 19:38:04

您可以使用以下命令:

luhn algo的方法:

代码语言:javascript
运行
复制
CREATE FUNCTION [dbo].[F_CHECK_LUHN] (@DATA VARCHAR(32)) 
RETURNS BIT AS 

BEGIN 
-- valeurs limites 
IF @DATA IS NULL OR @DATA = '' RETURN NULL; 

DECLARE @Cpt INT = 0;
declare @C CHAR(1);
declare @Chiffre integer=0;  
declare @Somme integer=0;
declare @parity integer;
set  @parity=LEN(@DATA) % 2;

WHILE @Cpt < LEN(@DATA)
BEGIN

   SET @C = SUBSTRING(@DATA, @Cpt+1, 1);

    IF @C NOT BETWEEN '0' AND '9' RETURN NULL;

    set @Chiffre=CAST(@C AS SMALLINT);

    if ((@Cpt % 2) =@parity)
    begin
    set @Chiffre=@Chiffre*2;

        if (@Chiffre>9)
        begin
        set @Chiffre=@Chiffre-9;
        end;

    end;

    set @Somme=@Somme+@Chiffre;

    SET @Cpt = @Cpt + 1;
END;

RETURN CASE WHEN @Somme % 10 = 0 THEN 1 ELSE 0 end ;

END;

控制警报器功能:

代码语言:javascript
运行
复制
CREATE FUNCTION [dbo].[F_IsSiren](@DATA VARCHAR(9)) 
RETURNS BIT AS 

BEGIN 

if @DATA is null or len(@DATA)<>9 or @DATA='000000000' return 0;

DECLARE  @Result bit;

select @Result=dbo.F_CHECK_LUHN(@DATA)

return @Result;
END ;

控制SIRET的函数:

代码语言:javascript
运行
复制
CREATE FUNCTION [dbo].[F_IsSiret](@DATA VARCHAR(14)) 
RETURNS BIT AS 

BEGIN 

if @DATA is null or len(@DATA)<>14 or @DATA='00000000000000' return 0;

DECLARE  @Result bit;
DECLARE  @ValidLuhn bit;


set @ValidLuhn=dbo.F_CHECK_LUHN(@DATA);

--Cas particuliere de la poste, la somme des chiffres doit être modulo 5
if @ValidLuhn=0 and left(@DATA, 9)='356000000'
begin
DECLARE @Cpt INT = 0;
declare @C CHAR(1);
declare @Chiffre integer=0;  
declare @Somme integer=0;

WHILE @Cpt < LEN(@DATA)
BEGIN

   SET @C = SUBSTRING(@DATA, @Cpt+1, 1);

    IF @C NOT BETWEEN '0' AND '9' 
    begin
    set @Somme=-1;
    break;
    end

    set @Chiffre=CAST(@C AS SMALLINT);

    set @Somme=@Somme+@Chiffre;

    SET @Cpt = @Cpt + 1;
END;

if ((@Somme % 5) =0)
set @Result=1;
else
set @Result=0;


end 
else
begin
--Verification algo de luhn
select @Result=@ValidLuhn;
end

return @Result;
END ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48042117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档