
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
- Adım: Barkod değerinin çift haneli rakamlar toplanır. B2 + B4 + B6 + B8 + B10 + B12
- Adım: 1.Adımda hesaplanan sayı 3 ile çarpılır.
- Adım: Barkod değerinin tek haneli rakamları toplanır. B1 + B3 + B5 + B7 + B9 + B11
- Adım: 2 nci ve 3 üncü adımda elde edilen sayılar toplanır.
- 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
| Print article | This entry was posted by Soner Çalımlı on 09/21/12 at 01:53:00 am . Follow any responses to this post through RSS 2.0. |
No feedback yet
Leave a comment
Trackback address for this post