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