Merhabalar, Kacan uykumun pesinden kosmak yerine bloglamak istedim. Fakat suan macbookumda oldugum icin turkce karakter kullanamiyorum malesef. Dubai mali olunca cihaz 🙂

Bu aralar check algoritmalarinin paylasildigi bir yer haline gelmekte baktim ki burasi, Luhn Check mod 10 dogrulamasi mevcut, Tc Kimlik dogrulamasi mevcut C# da EAN 13 ve EAN8 nasil hesaplanir onu yazayim dedim.

Turkce karakter kullanmadigim icin ozur dileyecektim konuyu nasil dagittim nereye ne sekilde blog’un iceriginde dondu 🙁 anlamadim ve suan ise yarar birsey yapmanin en guzel kismi uykum geldi 🙁

Fazla uzatmiyim EAN 8 ve EAN 13 birer barkod cesididir. Hatta en cok kullanilanlardan birtanesidir. Ean13’u surekli ev urunlerinde gorurz uzunlu kisali olan barkod cesitlerindendir ean.

Ean 13 e ornek :

perakendecilik sektorunden bir ornek ve anlatimi.

Ean 13 ilk 12 hanesi barkod datasidir. 13. karakter kontrol dijit.

Ean 8 ilk 7 hanesi barkod datasi, 8. karakter kontrol dijiti.

kimi yerde kontrol dijiti kimi yerde check digit yaziyorum kusura bakmayin.

(Kodlar baska kaynaklardan alintidir..)

Ean 13 C# kodu :

static int _checksum_ean13(String data)
{
    // Test string for correct length
    if(data.Length != 12 && data.Length != 13)
        return -1;

    // Test string for being numeric
    for(int i=0;i<data.Length;i++)
    {
        if(data[i] < 0x30 || data[i] > 0x39)
            return -1;
    }

    int sum = 0;

    for(int i=11;i>=0;i--)
    {
        int digit = data[i] - 0x30;
        if ((i & 0x01) == 1)
            sum += digit;
        else
            sum += digit * 3;
    }
    int mod = sum % 10;
    return mod == 0 ? 0 : 10 - mod;
}

Ean 8 C# Kodu :

static int _checksum_ean8(String data)
{
    // Test string for correct length
    if(data.Length != 7 && data.Length != 8)
        return -1;
	
    // Test string for being numeric
    for(int i=0;i<data.Length;i++)
    {
        if(data[i] < 0x30 || data[i] > 0x39)
            return -1;
    }

    int sum = 0;

    for(int i=6;i>=0;i--)
    {
        int digit = data[i] - 0x30;
        if ((i & 0x01) == 1)
            sum += digit;
        else
            sum += digit * 3;
    }
    int mod = sum % 10;
    return mod == 0 ? 0 : 10 - mod;
}

Merhabalar sevgili okurlarım, gerçeği söylemek gerekirse okurum olabilecek bir içeriğim yok. Bunun farkındayım, daha çok googlayanlaya yönelik bilgi kaynağım mevcut tabi.

Düşük cümleler kuruyorsam affola. Yavaş yavaş Türkçe karakterleri kullanmaya çalışıyorum.

Bir önceki yazımda IMEI ve Kredi kartı gibi verilerin kontrolünde kullanılan algoritmayı paylaşmıştım. Luhn Check digit Mode 10 algoritması Bu yazımda da T.C. kimlik numarasının 10. ve 11. hanelerini hesaplayacağız.

Öncelik ile tc kimlik no Türkiye Cumhuriyeti vatandaşlarının kimliklerine verilen ID (identification) numaralarıdır. Devlet dairelerinde, bankalarda ve bir çok noktada güvenlik ve kimlik tanımlama işlemi için kullanılır. T.C. veri tabanında sorgulamak için belirli anlaşmalar yapmanız ve ücretini ödemeniz gerekmektedir. T.C. Kimlik No o kişiye ait mi bunun kontrolünü direk siz yapamazsınız fakat Numara kurallara uygun mu buna bakarsınız; Bunun için gerekli bilgiler :
  1. TC Kimlik numaraları 11 basamaktan oluşmaktadır.
  2.  İlk 9 basamak arasında kurulan bir algoritma bize 10. basmağı, ilk 10 basamak arasında kurulan algoritma ise bize 11. basamağı verir.
  3.  11 hanelidir.
  4. Her hanesi rakamsal değer içerir.
  5.  İlk hane 0 olamaz.
  6. Son hane tek sayi (1,3,5,7,9) olamaz
  7. 1. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında, elde edilen sonucun 10′a bölümünden kalan, yani Mod10′u bize 10. haneyi verir.
  8. 1. 2. 3. 4. 5. 6. 7. 8. 9. ve 10. hanelerin toplamından elde edilen sonucun 10′a bölümünden kalan, yani Mod10′u bize 11. haneyi verir.
  9. 10. hanenin hesaplama şekline göre çift bir sayının 10’a bölümü çift, tek bir sayının 10’a bölümü tek sayı olur. 2 adet çift sayının toplamı çift, 2 adet tek sayının toplamı çift sonuç verir. Bu sonuça göre Son hane her zaman çifttir. 

Şimdi gelelim farklı dillerdeki doğrulama örneklerine.

C#

public static bool TcDogrulaV2(string tcKimlikNo)
{
    bool returnvalue = false;
    if (tcKimlikNo.Length == 11)
    {
        Int64 ATCNO, BTCNO, TcNo;
        long C1,C2,C3, C4, C5,C6,C7,C8, C9,Q1,Q2;
 
        TcNo = Int64.Parse(tcKimlikNo);

	// bolu yuz islemi int tanimlanmis degiskende son 2 haneyi silmek icin kullanılır.
 
        ATCNO = TcNo / 100;
        BTCNO = TcNo / 100;
 
         C1 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C2 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C3 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C4 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C5 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C6 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C7 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C8 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         C9 = ATCNO % 10;  ATCNO = ATCNO / 10 ;
         Q1 = ((10-((((C1+C3+C5+C7+C9)*3)+(C2+C4+C6+C8))%10))%10);
         Q2 = ((10-(((((C2+C4+C6+C8)+Q1)*3)+(C1+C3+C5+C7+C9))%10))%10);

         /*
         Q1 TC nosunun 10. hanesi
         Q2 TC nosunun 11. hanesi
         BTCNO son 2 hanesi olmayan tckimlikNo
         */ 

         returnvalue = ((BTCNO * 100)+(Q1 * 10)+Q2 == TcNo);
    }
    return returnvalue;
}

Vb.Net

Function TcDogrulaV2(ByVal tcKimlikNo As String) As Boolean
    Dim returnvalue As Boolean = False
    If (tcKimlikNo.Length <> 11) Then
        tcCustom.ErrorMessage = "<br>TC Kimlik Numarası 11 Haneli Olmalıdır."
        Return returnvalue
    End If
    Dim TcNo As Long = Long.Parse(tcKimlikNo)
    Dim BTCNO As Long = Long.Parse(Left(tcKimlikNo, 9))
         
    Dim C1 As Long = Long.Parse(Mid(tcKimlikNo, 1, 1))
    Dim C2 As Long = Long.Parse(Mid(tcKimlikNo, 2, 1))
    Dim C3 As Long = Long.Parse(Mid(tcKimlikNo, 3, 1))
    Dim C4 As Long = Long.Parse(Mid(tcKimlikNo, 4, 1))
    Dim C5 As Long = Long.Parse(Mid(tcKimlikNo, 5, 1))
    Dim C6 As Long = Long.Parse(Mid(tcKimlikNo, 6, 1))
    Dim C7 As Long = Long.Parse(Mid(tcKimlikNo, 7, 1))
    Dim C8 As Long = Long.Parse(Mid(tcKimlikNo, 8, 1))
    Dim C9 As Long = Long.Parse(Mid(tcKimlikNo, 9, 1))
         
    Dim Q1 As Long = ((10 - (((((((C1 + C3) + C5) + C7) + C9) * 3) + (((C2 + C4) + C6) + C8)) Mod 10)) Mod 10)
    Dim Q2 As Long = ((10 - (((((((C2 + C4) + C6) + C8) + Q1) * 3) + ((((C1 + C3) + C5) + C7) + C9)) Mod 10)) Mod 10)
    'Response.Write((((BTCNO * 100) + (Q1 * 10)) + Q2) & " - ")
    'Response.Write(tcKimlikNo)
    If ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo) Then
        tcCustom.ErrorMessage = ""
    Else
        tcCustom.ErrorMessage = "<br>Hatalı TC Kimlik Numarası."
    End If
       
    Return ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo)
End Function

Javascript

function check_tcno(a){
  if(a.substr(0,1)==0&&a.lenght!=11){
    return false;
  }
  var i = 9, md='', mc='', digit, mr='';
  while(digit = a.charAt(--i)){
    i%2==0 ? md += digit : mc += digit;
  }
  if(((eval(md.split('').join('+'))*7)-eval(mc.split('').join('+')))%10!=parseInt(a.substr(9,1),10)){
    return false;
  }
  for (c=0;c<=9;c++){
    mr += a.charAt(c);
  }
  if(eval(mr.split('').join('+'))%10!=parseInt(a.substr(10,1),10)){
    return false;
  }
  return true;
}

PHP

// with pattern
function check_tcno($tcno) {
        preg_replace('/([1-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1})([0-9]{1}).*$/e', "eval('\$on=((((\\1+\\3+\\5+\\7+\\9)*7)-(\\2+\\4+\\6+\\8))%10); \$onbir=(\\1+\\2+\\3+\\4+\\5+\\6+\\7+\\8+\\9+\$on)%10; \$sonIki = \$on.\$onbir;')", $tcno);
        return(substr($tcno, -2) == $sonIki);
}

// spagetti
function _tcNoCheck($tcNo){
    // For Controller
    $isDouble = is_double($tcNo);
    $size     = strlen($tcNo);
    $type     = gettype($tcNo);
              
    // First Controller
    if($tcNo == "" || $tcNo == null || $tcNo == 0){
        return false; //Bu alan boş bırakılamaz!
    }else if($size != 11 && $type != "integer"){            
        // Data Type Size Controller
        return false; //T.C. kimlik no 11 haneli olmak zorundadır!
    }else if($type == "integer"){
        // Type convert controller
        return false; //T.C. kimlik no 0(sıfır) ile başlayamaz ve 11 hane olmak zorundadır!
    }else if($isDouble != true) {
        // Data Type Controller
        return false; //T.C. kimlik no sadece sayısal girilmelidir!
    }else{
        // TC NO's
        $tc1;$tc2;$tc3;$tc4;$tc5;$tc6;
        $tc7;$tc8;$tc9;$tc10;$tc11;
              
        $tc1 = substr($tcNo,0,1);
        $tc2 = substr($tcNo,1,1);
        $tc3 = substr($tcNo,2,1);
        $tc4 = substr($tcNo,3,1);
        $tc5 = substr($tcNo,4,1);
        $tc6 = substr($tcNo,5,1);
        $tc7 = substr($tcNo,6,1);
        $tc8 = substr($tcNo,7,1);
        $tc9 = substr($tcNo,8,1);
        $tc10 = substr($tcNo,9,1);
        $tc11 = substr($tcNo,10,1);
  
        //First Algo. Checks
        $algoCheck1 = (($tc1 + $tc3 + $tc5 + $tc7 + $tc9) * 7);
        $algoCheck2 = abs(((($tc2 + $tc4 + $tc6 + $tc8) - $algoCheck1) % 10));
        $algoCheck3 = (($tc1 + $tc2 + $tc3 + $tc4 + $tc5 + $tc6 + $tc7 + $tc8 + $tc9 + $tc10) % 10); 
                  
        if($algoCheck2 != $tc10){
            return false; //Geçersiz T.C. kimlik no!!!
        }
                 
        if($algoCheck3 != $tc11){
            return false; //Geçersiz T.C. kimlik no!!!
        }
    }
              
        //GEÇERLİ T.C. Kimlik No.>";
        return true;
 }

//kisaltilmis (ev makarnasi :p)

function is_valid_tckn( $tckn )
{
    $x = $tckn;
    $valid1=((7*($x[0]+$x[2]+$x[4]+$x[6]+$x[8])-($x[1]+$x[3]+$x[5]+$x[7]))%10)==$x[9];
    $valid2=(($x[0]+$x[1]+$x[2]+$x[3]+$x[4]+$x[5]+$x[6]+$x[7]+$x[8]+$x[9])%10)==$x[10];
    return $valid1 && $valid2;
}

Delphi

Function TCKimlikDogrula(TCNo : String) : Boolean;
var
 bir,iki,uc,dort,bes,alti,yedi,sekiz,dokuz,onn,onbir,
 ilk,son,onuncu,onbirinci :  integer;
 _Soniki, pSoniki : string;
begin
 if (Length(TCNo) < 11) or (Length(TCNo) > 11 ) then
  begin
     ShowMessage('doğru düzgün gir tc no nu !!');
     Abort
  end
   else
 bir := StrToInt(TCNo[1]);
 iki := StrToInt(TCNo[2]);
 uc  := StrToInt(TCNo[3]);
 dort:= StrToInt(TCNo[4]);
 bes := StrToInt(TCNo[5]);
 alti:= StrToInt(TCNo[6]);
 yedi:= StrToInt(TCNo[7]);
 sekiz:= StrToInt(TCNo[8]);
 dokuz:= StrToInt(TCNo[9]);
 onn  := StrToInt(TCNo[10]);
 onbir:= StrToInt(TCNo[11]);
 
 ilk := (bir+uc+bes+yedi+dokuz) * 7;
 son := iki+dort+alti+sekiz;
 onuncu := (ilk - son) mod 10;
 onbirinci := (bir+uc+bes+yedi+dokuz+iki+dort+alti+sekiz+onuncu);
 onbirinci := onbirinci mod 10;
 
 _Soniki := IntToStr(onuncu) + IntToStr(onbirinci);
 pSoniki := TCNo[10] + TCNo[11];
 
 if _Soniki = pSoniki then
  begin
   Result := True;
  end
   else
    Result := False;
end;

Python

# -------------------------------------------------------------------------
# tc numarasının checksum kısmını hesaplayan kısım
def tcno_checksum(tcno):
    tc    = '%d' % tcno
    tc10  = int(tc[0]) + int(tc[2]) + int(tc[4]) + int(tc[6]) + int(tc[8])
    tc10 *= 7
    tc10 -= int(tc[1]) + int(tc[3]) + int(tc[5]) + int(tc[7])
    tc10 %= 10
 
    tc11  = int(tc[0]) + int(tc[1]) + int(tc[2]) + int(tc[3]) + int(tc[4])
    tc11 += int(tc[5]) + int(tc[6]) + int(tc[7]) + int(tc[8]) + int(tc10)
    tc11 %= 10
 
    return '%s%d%d' % (tc, tc10, tc11)

Tsql

CREATE PROCEDURE [dbo].[tckimliknoDogrulama]

(

@TCKimlikNo nvarchar(11)

)

AS

SET NOCOUNT ON

if @TCKimlikNo is null

begin

return 'false'

end

if LEN(@TCKimlikNo) <> 11

begin

return 'false'

end

--Sayi mi degil mi kontrolu

declare @count int

select @count=1

while @count<=LEN(@TCKimlikNo)

begin

if substring(@TCKimlikNo,@count,1)<>'0' and substring(@TCKimlikNo,@count,1)<>'1' and substring(@TCKimlikNo,@count,1)<>'2'

and substring(@TCKimlikNo,@count,1)<>'3' and substring(@TCKimlikNo,@count,1)<>'4' and substring(@TCKimlikNo,@count,1)<>'5'

and substring(@TCKimlikNo,@count,1)<>'6' and substring(@TCKimlikNo,@count,1)<>'7' and substring(@TCKimlikNo,@count,1)<>'8'

and substring(@TCKimlikNo,@count,1)<>'9'

begin

return 'false'

end

select @count= @count+1

end

--Cift mi degil mi kontrolu

if (substring(@TCKimlikNo,LEN(@TCKimlikNo),1)<>'0' and

substring(@TCKimlikNo,LEN(@TCKimlikNo),1)<>'2' and

substring(@TCKimlikNo,LEN(@TCKimlikNo),1)<>'4' and

substring(@TCKimlikNo,LEN(@TCKimlikNo),1)<>'6' and

substring(@TCKimlikNo,LEN(@TCKimlikNo),1)<>'8' )

begin

return 'false'

end

declare @tmp1 bigint,@tmp bigint,@asb nvarchar(9),@str nvarchar(5)

select @tmp1= convert(bigint,@tckimlikno)/100, @tmp= convert(bigint,@tckimlikno)/100

select @count =9,@asb=''

while @count>0

begin

select @str=substring(@TCKimlikNo,@count,1)

select @asb=@asb+@str

select @count = @count -1

end

declare @oddsum bigint,@evensum bigint,@evensumtot bigint,@oddsumtot bigint,@total bigint,@chkdigit1 bigint,@chkdigit2 bigint

SELECT @oddsum=convert(bigint,(substring(@asb,1,1)))+convert(bigint,(substring(@asb,3,1)))+convert(bigint,(substring(@asb,5,1)))+convert(bigint,(substring(@asb,7,1)))+convert(bigint,(substring(@asb,9,1)))

SELECT @evensum=convert(bigint,(substring(@asb,2,1)))+convert(bigint,(substring(@asb,4,1)))+convert(bigint,(substring(@asb,6,1)))+convert(bigint,(substring(@asb,8,1)))

select @oddsumtot=@oddsum,@evensumtot=@evensum

select @total=@oddsum*3+@evensum

select @chkdigit1= (10-@total%10)%10

select @oddsum= @chkdigit1+@evensumtot

select @evensum= @oddsumtot

select @total = @oddsum*3+@evensum

select @chkdigit2=(10-@total%10)%10

select @tmp =@tmp*100+@chkdigit1*10+@chkdigit2

if @tmp <> convert(bigint,@tckimlikno)

begin

return 'false'

end

else

begin return 'true'

end

RETURN

 

Merhabalar, Şuan Iphone6 canlı yayında tanıtılıyor ama internet yayını çok kotu izlenmiyor… Uzun zamandır yazmıyorum. İş güç değişimler zamansızlık dan öte kendime zaman ayırma lüksümün olmadığını düşündüğümden yazmıyordum belkide. Gevezeyim yazdığımda uzuyıp gidiyor. Fazla uzatmadan konuya geleyim.

Bir arkadaş az önce aradı MOD10 Kart no hesaplama diye bir şey varmış sen bilirsin. Eeee bilirim de ? dememe kalmadan bilirim dediğim an bana o lazım diye geldi istek. mod10 olarak arkadaşın söylediği şey aslında Luhn Algorithm (Luhn Algoritması)

Kısa tarih bilgisi ile bir alman olan Hans Peter Luhn abimiz tarafından 1954 yılında dakte edilen sayıların yanlış girilip girilmediğini kontrol amaclı geliştirilmiş. IMEI – Kredikarti gibi sayıların son karakterinde doğrulama kodu olarak kullanılır.

Kendi kullandığım fonksiyonları paylaşmak istemedim. Bir googlelayım dedim. 2-3 sayfada karsıma kodtarifi diye bir siteden makale çıktı.

using System;
using System.Linq;
//Credit Card Check Digit - Luhn Algorithm
namespace LuhnAlgorithm
{
    class Program
    {
        static void Main(string[] args)
        {
           string ccNo = "4022999999994026";
           bool sonuc = IsLuhnValid(ccNo);//Parametre olarak k.k numarası geçilir.
        }

        public static bool IsLuhnValid(string value)
        {
            return value.Where(c => Char.IsDigit(c)).Reverse()
              .SelectMany((c, i) => ((c - '0') << (i & 1)).ToString())
              .Sum(c => c - '0') % 10 == 0;
        }
    }
}

kullanım seklide :

string ccNo = "4022999999994026";
bool sonuc = IsLuhnValid(ccNo);//Parametre olarak k.k numarası geçilir.
if(!sonuc)
 Console.WriteLine("Kart numarası hatalı!");
else
 Console.WriteLine("Kart numarası doğru.");

Sayfanın üst kısmından gördüm ki sitenin sahibi Fulya hanım mış, paylaştığı kod için teşekkür ederim. Kendisi iş hayatından tanıdığım ve aynı projede görev aldığım bir insan.

Bu arada kendi kodumu paylaşmama nedenim çok gizli özel kapalı saklama kabında hatta banka kasasında saklanması gereken bir kod olduğundan değil. Bayağı eskiden kalma iş görecek kadar yazılmış bir kod olmasından dolayı. Ebem dedem misali düz ve gerektiği kadar kod yazan bir insanim. Türemeler Miraslar kalıtımlar günümüzde gereksiz fazla kullaniliyor bence. Hala entity framework yerine kendi dbHelper sinifi uzerinden db işlemlerini yürüten birisi olarak yeterince dinazor olduğumu belirterek kendi kodumuda buraya ekliyim :

        public string LuhnCheck(string cardNumber)
        {
            int total = 0;
            int power = 2;

            for (int i = cardNumber.Length - 2; i >= 0; i += -1)
            {
                int res = Convert.ToInt32(cardNumber.Substring(i, 1)) * power;
                if (res >= 10)
                    res -= 9;
                total += res;
                power = power ^ 3;
            }

            total = 10 - (total % 10);
            if (total != 10)
            {
                return total.ToString();
            }
            else
            {
                return "0";
            }
        }

burdaki kodun calisma mantigi son karakteri hesaplama

string strCardNo = BIN + strSelectedCardNoPad.PadLeft(7, '0').Substring(0, 7);
string chrChckDjt =  LuhnCheck(strCardNo + "0");
return strCardNo + chrChckDjt;

Şeklinde de bir yerde kullanmışım mesela. BIN kodu kart’a ait Patentli seri no başlangıç bölümü. Sonrasında gerekli hesaplamaları yapıp üretilen 15 haneli kart numarasına son karakter eklenerek toplam 16 haneli kart numarası elde ediliyor.

Bu kodu verip bitirmek olmamalı; Mantığınıda anlatmaya çalışıyım.

Örnek kart No : 4022999999994026
bunda numaraları 1’er atlayarak grupluyoruz, Yukarda Kalın ve Kırmızılar diye iki grup oluştu.

Kalınları (ilk karakteri ve 1’er atlanmış halini) 2 ile carpıyor çift hane çikarsa bir sonucun onlar ve birler basamağını topluyoruz. Kırmızıları ise direk topluyoruz.

4 x 2 2 x 2 9 x 2 9 x 2 9 x 2 9 x 2 4 x 2 2 x 2
8 4 18 -> 1+8 18 -> 1+8 18 -> 1+8 18 -> 1+8 8 4
8 4 9 9 9 9 8 4

8 + 4 + 9 + 9 + 9 + 9 + 8 + 4 = 60 ilk cift sonucu

0 + 2 + 9 + 9 + 9 + 9 + 0 + 644

60 + 44 = 104

104 Mod 10 = 4

Luhn algoritmasina Mod10 yada Modulus 10 algoritmasi denmesinin sebebi bu işlemler bittiginda olusan sonucun Mod10 yapıldığında 0 kalması gerekmekte olmasıdır. Yani hesapladigimiz Kart no Luhn algoritmasina uymuyor Mod10 da sonuc 4 kaliyor. son karakter 6 degil 2 olsa toplamda 4 değer duşeceğinden Luhn algoritmasına uygun kod elde etmiş olacaktık.

Online kontrol ve test yapmak isteyen olursa : http://planetcalc.com/2464/ adresinde hazir bir tane mevcut. Luhn degeri 0 tutturmaya calişcaksınız.
Her türlü Akıllı kart ürünü Yoroca tarafından geliştirile bilir, Aklınızda bulunsun, belki gerekir…

Entity Framework (EF)’ün tanımına geçmeden bilmemiz gereken bir iki tanim vardir. Bunlar Object Relational Mapping (ORM) ve Object Oriented Programming (OOP). Entity Framework, .Net platformunda ORM (Object Relational Mapping) araçlarından biridir. ORM (Object Relational Mapping) ise veritabanı ile nesneye yönelik programlama (OOP) arasındaki ilişkiyi kuran teknolojidir. Yani Entity Framework, nesne tabanlı programlamada veritabanındaki tablolara uygun nesneler oluşturma tekniğidir.

Öncelikle ORM nedir sorusuna cevap bulalım ; Veritabanımızda yaratmış olduğumuz her bir nesneye karşılık kod tarafında bir nesne oluşturan programlardır diyebiliriz. Bu programlar code generation veya shema generation tekniği kullanarak bizim yazmamız gereken kodu otomatik üretiyor veya tam tersinde bizim yazdigimiz kod sablonuna uygun database semasini olusturuyor.

Günümüzde kullanılan birçok ORM aracı bulunmaktadır. Örneğin; Java tabanlı olarak Hibernate, Flex’de Athena Framework, Delphi’de ECO gibi. Entity Framework ise Microsoft tarafından geliştirilen .Net tabanlı bir ORM aracıdır. Entity Framework ile kolayca CRUD işlemleri yapılabilir. Peki, neden ORM? Çünkü;

– Veritabanı işlemleri ile ilgili kod yazımı en aza ineceğinden minimum zamanda maksimum iş çıkartmayı sağlar.

– OOP düzeninde kod yazmayı sağlar.

– Veritabanı olarak esnek yapıya sahiptir. Örneğin yazdığınız proje MSSQL ile çalışmakta ve birden Oracle’a geçmeniz istendi. Bunu yapabilmek için birçok ayar gerekirken Entity Framework ile direkt geçiş yapabilirsiniz.

– Veritabanı bağımlılığı yoktur. Yani EF’yi oluşturmadan önce veritabanı tablo ve kolonlarını oluşturmalısınız gibi bir kural yoktur. Siz EF ile modellemeyi yaparken olmayan tabloları ve kolonları sizin yerinize açacaktır.

-Maintenance daha kolaydır.

Her ne kadar EF kodlama olarak zaman kazandırsa da performans olarak ADO.Net kadar hızlı değildir. Bunu ayriyetten belirtmek istedim cunku yazilan her proje Entity ile olmak zorunda degildir ve/veya projenin tamaminda entity kullanmak zorunda olmak sizin icin dezavantaj olabilir.

Entity Framework .Net 3.5 ile beraber Vs 2008 sp1 ile gelmistir. tarih 11 Agustor 2008

Database tarafinda relationshiplarimiz (iliskiler) orm tarafinda association olarak adlandirilacaktir.

Entity Framework ile 4 farklı yöntem ile proje geliştirilebilir. Bu yöntemler;

– Model First (New Database)

–  Database First (Existing Database)

– Code First (New Database)

– Code First (Existing Database)

Model First (Önce Model): Bu yöntemde Visual Studio üzerinde boş bir model dosyası (.edmx) eklenerek veri tabanı bu model üzerinde tasarlanir. Derleme adiminda verilen script dosyasi ile veri tabani oluşturulur.

Database First (Önce Veritabanı): Bu yöntemde hali hazırda var olan veritabanı projeye model dosyası ile bağlanır ve gerekli class’lar EF tarafından üretilir. Ilerde veritabanina yapilacak eklemelerde mevcut version Ef 6 da sorunlar yasamistim kod daki classlarin iliskilerini tam yapamadigi icin bu versionu kullanmaktan uzak durmaktayim (giris seviyesineki en kolay version da budur.

Code First (Önce Kod – Yeni Veritabanı): Bu yöntemde classlar ve mapping kodları yazılımcı tarafından oluşturulur. Daha sonra veri tabanı bu class’lardan türetilir.

Code First (Önce Kod – Var olan Veritabanı): Bu yöntemde de classlar ve mapping kodları yazılımcı tarafından oluşturulur. Veritabanı class’ların ve modellemenin durumuna göre tekrardan şekillenebilir.

ilerleyen yazilarimda ustunde duracagim daha cok Code First olan version olacaktir.

Merhabalar;

Bir format sonrasi kurulumlarimi yapmaktayim. VLC’yi kurarken error 1814 diye bir hata aldim.

Bu hata sizinde basiniza gelirse diye paylasmak istedim. Hayanin cozumu cok basit. sag tiklayip “Run As Administrator” pc turkce ise “Yonetici olarak calistir” diyin ve kuruluma baslayin.

VLC’yi hem windows pc’mde hem linux pc’mde, hemde androidde kullaniyorum, herkese tavsiye ederim.

Cep telefonum Samsung Note 2, uzerine 64gb’lik CLASS 10 hafiza karti taktim ve suan izlemekte oldugum anime NARUTO’yu yukledim. metrobuste, serviste gunde yaklasik iki bucuk saat trafikte yollarda zaman gecirmekteyim guzel bir kullanim ile rahat oluyor.

VLC’nin bir diger onemli ozelligi ise normal ses’in %100 oldugu halde VLC bunu biraz kaliteyi dusurarek %300’e kadar cikartabiliyor. Ana ekranda sesini yukseltme kisminden yukseltip %200’e getirebilirsiniz ama mausenin scrool tusunu video uzerinde iken kulanarak daha yuksek bir ses cikisida elde edebiliyorsunuz.

cok yorgunum ve yatagimda uzanip aklimdan gecenleri blogluyorum iste, neyse size hayirli geceler.