Php İle Kredi Kartı Geçerliliği Doğrulaması

Merhabalar,

Bir ödeme sistemi, tahsilat sistemi, e-ticaret sistemi vb gibi uygulamalar geliştirirken, çokça kredi kartı numarasını bir ön doğrulamadan geçirme ihtiyacı duyuyoruz. Duymalıyız da. Bir web yazılımcısı olarak asla kullanıcıdan aldığımız, kullanıcının girdiği verilere güvenmemeliyiz. Bu veriler çoğu zaman, zararlı içerikler içeriyor olabilir. Ya da hiç düşünmediğimiz bir istisnaya sebebiyet verebilir. Bu gibi durumlarla karşılaşmamak adına verileri doğrulayıp, kullanmalıyız.

Kredi kartı numarası Luhn adı verilen bir algoritma ile oluşturulur. 4 ile başlarsa Visa, 5 ile başlarsa MasterCard türündedir.

Luhn Algoritmasını matematiksel olarak açıklayalım.

1234 1234 1234 1234 şeklinde 16 haneli  bir kredi kartımız olsun.

TÇTÇ TÇTÇ TÇTÇ TÇTÇ diyelim yani;

1,3,5,7,9,11,13,15 sırada bulunan rakamlara T diyelim.

2,4,6,8,10,12,14,16. sırada bulunan rakamlarada Ç diyelim.

İlk olarak tüm Ç’leri toplayalım;

2+4+2+4+2+4+2+4=24

Tüm T’leri de ayrı ayrı 2 ile çarpıp, topluyoruz.

(1×2)+(3×2)+(1×2)+(3×2)+(1×2)+(3×2)+(1×2)+(3×2)=24

Şimdi ilk sonuç ile 2. sonucu toplayalım.

Yani 24+24=48.

Şimdi 48’in mod10’nu alalım. Yani 10’a bölüp kalanına bakalım. Geçerli bir kredi kartı için işlem sonucunun 0 olması gerekli. Yani 10’a tam bölünmeli.

Görüldüğü gibi 48’in  Mod10’nu 8 olduğu için bu kredi kartı geçersizdir.

İşin hikayesini tamamladık. Şimdi bunu PHP ile yapalım. Yehuu :).

function isValid($num) {
$num = preg_replace('/[^\d]/', '', $num);
$sum = '';

for ($i = strlen($num) - 1; $i >= 0; -- $i) {
$sum .= $i & 1 ? $num[$i] : $num[$i] * 2;
    }

return array_sum(str_split($sum)) % 10 === 0;
}

Olur da canımız Javascript kullanmak isterse de :);

function isValid(number) {
var num = number.replace(/[^\d]/, '');
var str = '';

for (var i = num.length - 1; i >= 0; -- i) {
str += i & 1 ? num[i] : (parseInt(num[i]) * 2).toString();
}

var sum = str.split('').reduce(function(prev, current) {
return prev + parseInt(current);
}, 0);

return sum % 10 === 0;
};

 

Sorularınız olursa yorum yazmaktan çekinmeyiniz. İyi çalışmalar.

Centos Üzerine SOLR Kurulumu

Bir önceki yazımızda SOLR’dan bahsetmiştik.

Kuruluma geçelim. İlk önce repo güncellemeyle işe koyulalım.

sudo yum update

SOLR, Java gerektirdiği için Java sürümüne bakalım.

java -v

Java version 8 veya 9 olmalı.

Sistemde wget ve nano kurulu değilse, bu paketleri kuralım.

yum install wget

yum install nano

Şimdi SOLR’ın güncel paketini indirip, açalım

cd /usr/local

wget http://www-eu.apache.org/dist/lucene/solr/7.3.0/solr-7.3.0.tgz

Arşivi açıp, kuruluma geçelim,

tar xzf solr-7.3.0.tgz solr-7.3.0/bin/install_solr_service.sh –strip-components=2

sudo bash ./install_solr_service.sh solr-7.3.0.tgz

SystemD yüklü olan kullanıcılar aşağıdaki komutlar ile SOLR servisini başlatabilir, durdurabilir, durumuna bakabilir.

sudo systemctl stop solr
sudo systemctl start solr
sudo systemctl status solr

kurulumu tamamladık. Şimdi ilk SOLR Core ve Arşivleme yapımızı yapılandıralım.

SOLR DATA KOLEKSİYONU OLUŞTURMA

SOLR’ı mevcut veritabanımızı indekslemeye hazır hale getirmeliyiz. Daha sonra SOLR RestAPI  üzerinden rahatlıkla sorgularımızı yapabiliriz.

sudo su – solr -c “/usr/local/solr/bin/solr create -c koleksiyon -n data_driven_schema_configs”

Core’umuzu oluşturduk. Created new core ‘koleksiyon’  dönmeli bize.

Tüm adımları doğru yerine getirdiysek, web arayüzüne geçebiliriz artık.

SOLR WEB ARAYÜZÜNE GİRİŞ

SOLR, öntanımlı olarak 8983 nolu portu kullanır. SOLR kurulumu yapılan makinenin ip’sinin 192.168.1.1 olduğunu varsayacağım. Anlatımları bunun üzerinden yapacağım.

http://192.168.1.1:8983

Bu adresten web arayüzüne ulaşıyoruz.

SOLR’ı bir kullanıcı girişi ile güvenceye almadık. Daha sonraki yazılarımda, SOLR’a erişmek için nasıl bir kullanıcı adı ve şifre atayacağımızı anlatacağım.

SOLR İLE RESTAPI ÜZERİNDEN SORGU ÇALIŞTIRMA

Core ve Collection’ı ayarladıktan sonra aşağıdaki resimdeki gibi bir ekran olacak.

Query linkine tıklayınca açılan sorgu penceresinden, istediğimiz sorguyu çalıştırabiliriz. Örnek çıktı’da önceki resimde gözükmektedir.

Yukarıdaki ekranda, sorgu için kullanılan parametrelerin birkaçını açıklayalım.

Alan Açıklama

(qt)

İstek tipi parametresi (Örn:”/Select”)

q

Sorgulama parametresi.

fq

Filtreleme  parametresi

sort

Sıralama parametresi

start, rows

Sonuçların belirli satırlarını çekmek için kullanılan parametre.

facet

Kategori bazlı indeksleme parametresi

Kurulum kısmını tamamladık. Başka bir SOLR yazısında görüşmek dileğiyle.

Solr’ın Prospektüsü

Solr,Apache Lucene projesinin bir parçası olan tam metin arama, çok yönlü arama, devirgen kümeleme, veritabanı ile bütünleşik, Microsoft Word veya PDF benzeri belgeleri indeksleme gibi özellikleri olan açık kaynak kodlu oldukça esnek bir arama motorudur. Solr en popüler kurumsal arama motoru yazılımdır.

Demişler Wikipedia’da.  Öncelikle işe, Türkçe mealiyle başlayalım.

Solr, bir veritabanı değil. Solr kendi içinde evet veri tutuyor. Ama bunları depolamak için değil, ihtiyaç duyulduğunda size hızlı bir şekilde sunma için kullanıyor. Yaniii?

  • Solr’ı sunucumuza kuruyoruz.(Solr Kurulumu)
  • Solr’da data klasörünün içine tablo şablonunun konfigürasyonunu oluşturuyoruz. Bu şu demek;

Mysql ‘de tutulan verimiz olsun. Örneğin 10.000 sayfalık bir kitabın sayfaları. Kitapta geçen bir kelimenin kaç kere geçtiğini, hangi sayfalarda geçtiğini öğrenmek istiyoruz. Bunu LIKE’ladığımızda dk’larca süren bir sorguyla karşı karşıya kalırız.3 dk mı olur? 5 dk mı olur? Ona bir şey veremem. Bu aramayı Solr kullanarak yapsaydık, sonuç 1-2 sn içerisinde dönecekti.

Tablonun benzeri bir şablon yapısını, SOLR şablon ayar dosyasında yapıyoruz. SOLR’a kurulum yaparken MySql driver’ını(JAR olarak) yüklüyoruz. Sonra da data çekeceğiniz database, şu MySql db’si diyoruz. Al bu datayı indeksle diyoruz. Tüm datayı içine çekiyor SOLR. Ve SOLR’ın REST yapısını kullanarak aramalar yapıyoruz. Örneğin; link.com:8983?q=merhaba dediğimizde tüm  amacımıza ulaşıp, bize dönen JSON ile mutlu oluyoruz.

Özetle SOLR’ı hızlı metin arama işlemleri için kullanıyoruz. Veritabanında LIKE kullanarak arama yapılan sonuç dakikalarca sürerken, SOLR ile bu 1 sn civarında sürüyor.

Nerede kullanabiliriz?

Dökümantasyon ama uygulamalarında, kütüphane katalog uygulamalarında özetle yüklü text içeren tüm veri aramalarında kullanabiliriz. Son olarak SOLR’a http://lucene.apache.org/solr/

buradan ulaşabilirsiniz.

İyi Çalışmalar.

 

Neden Php’ye Sövmemeliyiz?

10 yıla yakın bir süredir Php kodluyorum. İlk öğrendiğim programlama dili değil, ama beni ben yapan PROGRAMLAMA dilidir. İlk zamanlarda nesne yönelimli değildi. Pdo yoktu. Printf mi ?yoksa Echo mu? tartışılıyordu. Hatta “Hello World” yazdırarak. “ms” cinsinden hız hesabı yapanlar bile vardı. Php ölü bir dil, ölecek, Python anasını üzecek diyenlerle doluydu her yer! İlk olarak “Zend” tuttu elinden. Daha sonra “codeigniter” okuyup, üfledi Php’yi. Symfony kan verdi, Laravel ise Kalsiyum-C-D Vitamini verdi. Büyümeye, gelişmeye devam ediyor.

Sıkıntıları yok mu? Var. Peki neler bunlar?

  • Çok zengin bir fonksiyon gabarına sahip. Amma velakin tanımlar-isimler belli bir kural-patern-kalıp izlemiyor. Böyle olunca, beynin bedava olduğunu hatırlatıp, hepsini hafızaya attırıyor. Örneğin; strpos(), str_replace(), is_null(), empty(); ne zaman alt çizgi kullanılacak? Ne zaman başa “is” konacak, ne zaman konmayacak bunu ancak deneyimlerimizle bilebiliyoruz.
  • Parametrelerin yerleri fonksiyona göre değişebiliyor.  str_pos() ve array_search() fonksiyonları buna örnektir. $param1,$param2 iken diğerinde $param2,$param1 olabiliyor.
  • Fonksiyonlar yazanın canı nasıl istemişse öyle değer döndürüyor. Bazı fonksiyonlar true-false, bazıları 0-1 bazıları null. Çok çılgın.
  • Concurrency(Eş zamanlılık), Multithreading(Çok işlilik) bulunmayışı.(Apache Modları ile çözülebiliyor. FPM Worker, pthreads vb.)
  • Yeni eklenen her özelliğin yanında, geriye uyumlu olacak diye, dilin fonksiyon çöplüğüne dönüyor olması. Biri de çıkıp, yeter artık yeni sürümde bu böyle! Böyle kullanacaksınız demiyor.

İyi yanları mı?

to be continued… (Pokemon çizgi filmlerinden esinlenerek. )