ASP ile Sayıları Yazıya Çevirme Fonksiyonu
ASP ile Sayıları Yazıya Çevirme Fonksiyonu (Fatura ve Resmi Evraklar İçin)
Klasik ASP (Active Server Pages) ile geliştirilen projelerde, özellikle e-ticaret veya muhasebe modülleri yazarken en sık karşılaşılan ihtiyaçlardan biri sayısal verileri metne dönüştürmektir.
Fatura, tahsilat makbuzu veya çek basımı gibi işlemlerde, tutarın rakamla yazılmasının yanı sıra güvenlik ve resmiyet gereği yazı ile (Örn: Yalnız YüzElli TL) de yazılması gerekir.
Bu yazımda, ASP projelerinizde kullanabileceğiniz, girilen sayıyı basamaklarına ayırarak (Milyar, Milyon, Binlik vb.) Türkçe metne çeviren hazır bir fonksiyonu paylaşıyorum.
Fonksiyonun Çalışma Mantığı
Paylaşacağım kod bloğu iki ana fonksiyondan oluşuyor:
- GeriyeKalaniCevir: 0-999 arasındaki sayıları (yüzler, onlar ve birler basamağı) metne dönüştürür.
- Cevir: Sayıyı büyük basamaklarına (Milyar, Milyon, Bin) ayırır ve her üçlü grup için yukarıdaki fonksiyonu çağırır.
İşte projenize include edebileceğiniz veya sayfanızın başına ekleyebileceğiniz kodlar:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
<% Function GeriyeKalaniCevir(GeriyeKalan) Dim KacYuz, OnlarBasamagi, BirlerBasamagi, SonucStr SonucStr = "" If GeriyeKalan <> 0 Then KacYuz = Fix(GeriyeKalan / 100) ' 100'den büyükse son iki haneyi al If Len(GeriyeKalan) > 2 Then GeriyeKalan = Right(GeriyeKalan, 2) End If ' Yüzler Basamağı İşlemi If KacYuz <> 0 Then If KacYuz = 1 Then ' 100 için "BirYüz" değil "Yüz" denir SonucStr = SonucStr & "Yüz" Else ' Recursive: 200 -> İkiYüz SonucStr = SonucStr & GeriyeKalaniCevir(KacYuz) & "Yüz" End If End If ' Onlar Basamağı İşlemi If GeriyeKalan > 9 Then OnlarBasamagi = Left(GeriyeKalan, 1) If OnlarBasamagi = 9 Then SonucStr = SonucStr & "Doksan" ElseIf OnlarBasamagi = 8 Then SonucStr = SonucStr & "Seksen" ElseIf OnlarBasamagi = 7 Then SonucStr = SonucStr & "Yetmiş" ElseIf OnlarBasamagi = 6 Then SonucStr = SonucStr & "Altmış" ElseIf OnlarBasamagi = 5 Then SonucStr = SonucStr & "Elli" ElseIf OnlarBasamagi = 4 Then SonucStr = SonucStr & "Kırk" ElseIf OnlarBasamagi = 3 Then SonucStr = SonucStr & "Otuz" ElseIf OnlarBasamagi = 2 Then SonucStr = SonucStr & "Yirmi" ElseIf OnlarBasamagi = 1 Then SonucStr = SonucStr & "On" End If End If ' Birler Basamağı İşlemi BirlerBasamagi = Right(GeriyeKalan, 1) ' Eğer sayı 10, 20 gibi tam sayı değilse birler basamağını ekle ' Veya sayı sadece tek haneli ise (örn: 5) If (GeriyeKalan > 9 And BirlerBasamagi <> "0") Or (Len(GeriyeKalan) = 1) Then If BirlerBasamagi = 9 Then SonucStr = SonucStr & "Dokuz" ElseIf BirlerBasamagi = 8 Then SonucStr = SonucStr & "Sekiz" ElseIf BirlerBasamagi = 7 Then SonucStr = SonucStr & "Yedi" ElseIf BirlerBasamagi = 6 Then SonucStr = SonucStr & "Altı" ElseIf BirlerBasamagi = 5 Then SonucStr = SonucStr & "Beş" ElseIf BirlerBasamagi = 4 Then SonucStr = SonucStr & "Dört" ElseIf BirlerBasamagi = 3 Then SonucStr = SonucStr & "Üç" ElseIf BirlerBasamagi = 2 Then SonucStr = SonucStr & "İki" ElseIf BirlerBasamagi = 1 Then SonucStr = SonucStr & "Bir" End If End If End If GeriyeKalaniCevir = SonucStr End Function Function Cevir(Sayi) Dim KacMilyar, KacMilyon, KacBin, AnaSonuc AnaSonuc = "" ' Milyarlar Basamağı If Len(Sayi) > 9 Then KacMilyar = Fix(Sayi / 1000000000) Sayi = Right(Sayi, 9) Else KacMilyar = 0 End If ' Milyonlar Basamağı If Len(Sayi) > 6 Then KacMilyon = Fix(Sayi / 1000000) Sayi = Right(Sayi, 6) Else KacMilyon = 0 End If ' Binler Basamağı If Len(Sayi) > 3 Then KacBin = Fix(Sayi / 1000) Sayi = Right(Sayi, 3) Else KacBin = 0 End If Dim GeriyeKalan GeriyeKalan = Sayi ' Sonuçları Birleştirme ' Milyar İşlemi If KacMilyar <> 0 Then AnaSonuc = AnaSonuc & GeriyeKalaniCevir(KacMilyar) & "Milyar" End If ' Milyon İşlemi If KacMilyon <> 0 Then AnaSonuc = AnaSonuc & GeriyeKalaniCevir(KacMilyon) & "Milyon" End If ' Binler İşlemi If KacBin <> 0 Then If KacBin = 1 Then ' "BirBin" denmez, sadece "Bin" denir. AnaSonuc = AnaSonuc & "Bin" Else AnaSonuc = AnaSonuc & GeriyeKalaniCevir(KacBin) & "Bin" End If End If ' Kalan son 3 hane AnaSonuc = AnaSonuc & GeriyeKalaniCevir(GeriyeKalan) Cevir = AnaSonuc End Function %> |
Kullanım Örneği
Fonksiyonu sayfanıza ekledikten sonra kullanımı oldukça basittir. Değişkene atadığınız veya veritabanından çektiğiniz sayıyı Cevir() fonksiyonuna göndermeniz yeterlidir.
|
1 2 3 4 5 6 7 8 9 10 |
<% Response.Write Cevir("1500") ' Çıktı: BinBeşYüz Response.Write "<br>" Response.Write Cevir("123456") ' Çıktı: YüzYirmiÜçBinDörtYüzElliAltı %> |
Önemli İpuçları
Bu kod bloğu, sayıları birleşik olarak (Örn: BinBeşYüz) yazar. Bu, özellikle çek ve senet basımlarında araya başka karakterler sıkıştırılmasını önlemek için tercih edilen bir yöntemdir. Eğer kelimeler arasında boşluk isterseniz, kod içindeki birleştirme operatörlerinin & yanına & " " & şeklinde boşluk ekleyebilirsiniz.