Sql Fonksiyon : Sql Server’da Ean13 tipi barkod check digit (kontrol karakteri) hesaplama işlemi nasıl yapılır ?

Soru:

EAN 13 tipi barkodlarda  13. karakter olan check digit (kontrol karakteri)   nasıl hesaplanır ?

Cevap:

Kontrol karakteri (Check Digit),  barkod rakamlarının sonunda bulunan ve kontrol karakterinden önceki tüm rakamların bir formül ile hesaplanması ile ortaya çıkan bir rakamdır.

Hesaplama nasıl yapılır?

Barkod Değeri: B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13

  1. Adım: Barkod değerinin çift haneli rakamlar toplanır.  B2 + B4 + B6 + B8 + B10 + B12
  2. Adım: 1.Adımda hesaplanan  sayı 3 ile çarpılır.
  3. Adım: Barkod değerinin tek haneli rakamları toplanır.  B1 + B3 + B5 + B7 + B9 + B11
  4. Adım: 2 nci ve 3 üncü adımda elde edilen sayılar toplanır.
  5. Adım: 4 üncü adımda çıkan rakam kendisinden büyük 10 sayısının katından çıkartılır.

Sonuç: 6. adımda hesaplanan  sayı kontrol karakteri (Check Digit) rakamıdır.

Bu işlemin sql server da bir skalar fonksiyon ile hesaplamak istersek.

...

    CREATE FUNCTION [dbo].[GenerateFullEAN13] (@InputUPC nchar(20))
    RETURNS nchar(13)

    BEGIN
    DECLARE @Sum int
    DECLARE @ChkDgt nchar(1)

    IF ( (Len(@InputUPC) < 12) OR (Len(@InputUPC) >13) )

    BEGIN
    RETURN NULL
    END

    ELSE IF (Len(@InputUPC) = 13)

    BEGIN
    SET @InputUPC = Left(@InputUPC, 12)
    END

    SET @Sum = 3 * (

    CAST(Substring(@InputUPC,2,1) AS int)
    + CAST(Substring(@InputUPC,4,1) AS int)
    + CAST(Substring(@InputUPC,6,1) AS int)
    + CAST(Substring(@InputUPC,8,1) AS int)
    + CAST(Substring(@InputUPC,10,1) AS int)
    + CAST(Substring(@InputUPC,12,1) AS int) )
    + CAST(Substring(@InputUPC,1,1) AS int)
    + CAST(Substring(@InputUPC,3,1) AS int)
    + CAST(Substring(@InputUPC,5,1) AS int)
    + CAST(Substring(@InputUPC,7,1) AS int)
    + CAST(Substring(@InputUPC,9,1) AS int)
    + CAST(Substring(@InputUPC,11,1) AS int)

    IF (@Sum % 10) = 0 BEGIN SET @ChkDgt = ’0′ END
    ELSE IF (@Sum % 10) = 1 BEGIN SET @ChkDgt = ’9′ END
    ELSE IF (@Sum % 10) = 2 BEGIN SET @ChkDgt = ’8′ END
    ELSE IF (@Sum % 10) = 3 BEGIN SET @ChkDgt = ’7′ END
    ELSE IF (@Sum % 10) = 4 BEGIN SET @ChkDgt = ’6′ END
    ELSE IF (@Sum % 10) = 5 BEGIN SET @ChkDgt = ’5′ END
    ELSE IF (@Sum % 10) = 6 BEGIN SET @ChkDgt = ’4′ END
    ELSE IF (@Sum % 10) = 7 BEGIN SET @ChkDgt = ’3′ END
    ELSE IF (@Sum % 10) = 8 BEGIN SET @ChkDgt = ’2′ END
    ELSE IF (@Sum % 10) = 9 BEGIN SET @ChkDgt = ’1′ END

    ELSE BEGIN SET @ChkDgt = ‘Z’ END
    RETURN Left(@InputUPC,12) + @ChkDgt
    END

No feedback yet
Leave a comment

Your email address will not be revealed on this site.
PoorExcellent
(Line breaks become <br />)
(For my next comment on this site)
(Allow users to contact me through a message form -- Your email will not be revealed!)
This is a captcha-picture. It is used to prevent mass-access by robots.

Please enter the characters from the image above. (case insensitive)

Array
Trackback address for this post
This is a captcha-picture. It is used to prevent mass-access by robots.

Please enter the characters from the image above. (case insensitive)

Array