Проверка на валиден БУЛСТАТ

Код:
функциите за са MSSQL предполагам че него ползваш

Булстат:

IF EXISTS (SELECT * FROM sysobjects WHERE name = N'BULSTAT')
  DROP FUNCTION dbo.BULSTAT
GO
CREATE FUNCTION dbo.BULSTAT (@bulstat VARCHAR(14))  
RETURNS INT AS  
BEGIN
  DECLARE @d9 INT, @n INT

  SET @n=dbo.digits(@bulstat)
  IF (@n<>9 AND @n<>13) RETURN 0
  SET @d9=(CAST(SUBSTRING(@bulstat,1,1) AS INT)+
           CAST(SUBSTRING(@bulstat,2,1) AS INT)*2+
           CAST(SUBSTRING(@bulstat,3,1) AS INT)*3+
           CAST(SUBSTRING(@bulstat,4,1) AS INT)*4+
           CAST(SUBSTRING(@bulstat,5,1) AS INT)*5+
           CAST(SUBSTRING(@bulstat,6,1) AS INT)*6+
           CAST(SUBSTRING(@bulstat,7,1) AS INT)*7+
           CAST(SUBSTRING(@bulstat,8,1) AS INT)*8)%11
  IF (@d9=10)
    SET @d9=((CAST(SUBSTRING(@bulstat,1,1) AS INT)*3+
              CAST(SUBSTRING(@bulstat,2,1) AS INT)*4+
              CAST(SUBSTRING(@bulstat,3,1) AS INT)*5+
              CAST(SUBSTRING(@bulstat,4,1) AS INT)*6+
              CAST(SUBSTRING(@bulstat,5,1) AS INT)*7+
              CAST(SUBSTRING(@bulstat,6,1) AS INT)*8+
              CAST(SUBSTRING(@bulstat,7,1) AS INT)*9+
              CAST(SUBSTRING(@bulstat,8,1) AS INT)*10)%11)%10
  IF (CAST(SUBSTRING(@bulstat,9,1) AS INT)<>@d9)
    RETURN 0
  IF (@n=13)
  BEGIN
    SET @d9=(CAST(SUBSTRING(@bulstat,9,1) AS INT)*2+
             CAST(SUBSTRING(@bulstat,10,1) AS INT)*7+
             CAST(SUBSTRING(@bulstat,11,1) AS INT)*3+
             CAST(SUBSTRING(@bulstat,12,1) AS INT)*5)%11
    IF (@d9=10)
      SET @d9=((CAST(SUBSTRING(@bulstat,9,1) AS INT)*4+
                CAST(SUBSTRING(@bulstat,10,1) AS INT)*9+
                CAST(SUBSTRING(@bulstat,11,1) AS INT)*5+
                CAST(SUBSTRING(@bulstat,12,1) AS INT)*7)%11)%10
    IF (CAST(SUBSTRING(@bulstat,13,1) AS INT)<>@d9)
      RETURN 0
  END

  RETURN 1
END
GO

-------------------------------------

Данъчен номер:

IF EXISTS (SELECT * FROM sysobjects WHERE name = N'taxnum')
  DROP FUNCTION dbo.taxnum
GO
CREATE FUNCTION dbo.taxnum (@tax VARCHAR(11))  
RETURNS INT AS  
BEGIN
  DECLARE @t2 INT, @t3 INT

  IF LEN(@tax)<>10 RETURN 0
  SET @t2=CAST(SUBSTRING(@tax,1,1) AS INT)*4+
          CAST(SUBSTRING(@tax,2,1) AS INT)*3+
          CAST(SUBSTRING(@tax,3,1) AS INT)*2+
          CAST(SUBSTRING(@tax,4,1) AS INT)*7+
          CAST(SUBSTRING(@tax,5,1) AS INT)*6+
          CAST(SUBSTRING(@tax,6,1) AS INT)*5+
          CAST(SUBSTRING(@tax,7,1) AS INT)*4+
          CAST(SUBSTRING(@tax,8,1) AS INT)*3+
          CAST(SUBSTRING(@tax,9,1) AS INT)*2
  SET @t3=@t2%11
  SET @t2=11-@t3
  IF @t3=1 RETURN 0
  IF @t3=0
    IF CAST(RIGHT(@tax,1) AS INT)=0 RETURN 1 ELSE RETURN 0
  IF CAST(RIGHT(@tax,1) AS INT)<>@t2 RETURN 0

  RETURN 1
END
GO
 

Back
Горе