lostyazilim
tr.link

Methodu Anlatabilecek Biri Varmıdır?

7 Mesajlar 1.040 Okunma
acebozum
tr.link

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)


public string MusteriEkle(string cardNumber)
{
byte[] number = new byte[16]; // number to validate

// Remove non-digits
int len = 0;
for (int i = 0; i < cardNumber.Length; i++)
{
if (char.IsDigit(cardNumber, i))
{
// if (len == 16) return false; // number has too many digits
number[len++] = byte.Parse(cardNumber[i].ToString());
}
}

// Use Luhn Algorithm to validate
int sum = 0;
if (len > 0)
{
for (int i = len - 1; i >= 0; i--)
{
if (i % 2 == len % 2)
{
int n = number[i] * 2;
sum += (n / 10) + (n % 10);
}
else sum += number[i];
}
}
int s = sum % 10;
if (s != 0)
{
s = 10 - s;
cardNumber = cardNumber.Remove(cardNumber.Length - 1, 1) + s.ToString();
}
return cardNumber;
}





yukarıdaki c# methodunun ne işlemler yaptığını anlatabilirseniz aynı fonksiyonu php ye çevirmem gerekiyor
 

 

wmaraci
reklam

KadirCeyhan KadirCeyhan WM Aracı Kullanıcı
  • Üyelik 23.10.2016
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Denizli
  • Ad Soyad K** C**
  • Mesajlar 689
  • Beğeniler 0 / 203
  • Ticaret 6, (%100)
Length İle 16 Hane Olup Olmadığını Kontrol Ediliyor. Aynı Andada Girilenler Bir Sayı Mı(isDigit) ? Kontrolü Yapılıyor

byte[] number = new byte[16]; // number to validate
// Remove non-digits
int len = 0;
for (int i = 0; i < cardNumber.Length; i++) {
if (char.IsDigit(cardNumber, i)) {
// if (len == 16) return false; // number has too many digits
number[len++] = byte.Parse(cardNumber[i].ToString());
}
}


Aşağıda İse Luhn Algoritması Kullanılarak, Geçerli Bir Kart Numarası Olup Olmadığını Kontrol Ediyor.

Mantık Nedir : Kontrol Edilen Numara Tek İse Direkt Olarak Tek Indis Değişkenine Eklenir. Çift İse 2 Katı Alınır Ve Basamak Toplanı Eklenir.

En Sonda İse, 2 Çeşit İndis Değişkenlerinin Mod 10 İşlemine Tabi Tutulup, True/False Döndürülür.


int sum = 0;
if (len > 0) {
for (int i = len - 1; i >= 0; i--) {
if (i % 2 == len % 2) {
int n = number[i] * 2;
sum += (n / 10) + (n % 10);
} else sum += number[i];
}
}
int s = sum % 10;
if (s != 0) {
s = 10 - s;
cardNumber = cardNumber.Remove(cardNumber.Length - 1, 1) + s.ToString();
}
return cardNumber;
 

 

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
Jelioxe hocam kaç gündür çeviremedim php ye yardımcı olabilir misin

bu şekilde denedim ama

function MusteriEkle($cardNumber)
{



$len = 0;
for ($i = 0; $i < strlen($cardNumber); $i++)
{
if (is_numeric($cardNumber))
{

$number[$len++] = $cardNumber[$i];
}
}

// Use Luhn Algorithm to validate
$sum = 0;
if ($len > 0)
{
for ($i = $len - 1; $i >= 0; $i--)
{
if ($i % 2 == $len % 2)
{
$n = $number[$i] * 2;
$sum += ($n / 10) + ($n % 10);
}
else $sum += $number[i];
}
}
$s = $sum % 10;
if ($s != 0)
{
$s = 10 - $s;
$cardNumber = strlen($cardNumber) - 1 + $s;
}
return $cardNumber;
}
$str="1073000000000000";
echo MusteriEkle($str);

?>


Ek Olarak: programdan eklendiğinde 107300...00
107300..18
107300..26
107300..34
107300..42
107300..59...burada iş bozuluyor
sonra tekrar 8+ arttırıyor
107300..109a geliyor
sonra tekrar 8 arttırıyor
 

 

KadirCeyhan KadirCeyhan WM Aracı Kullanıcı
  • Üyelik 23.10.2016
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Denizli
  • Ad Soyad K** C**
  • Mesajlar 689
  • Beğeniler 0 / 203
  • Ticaret 6, (%100)

function LuhnKontrol($Numara){
for($Toplam = 0, $i = strlen($Numara) - 1; $i >= 0; $i--) {
$Rakam = (int)$Numara[$i];
$Toplam += (($i % 2) === 0) ? array_sum(str_split($Rakam * 2)) : $Rakam;
}
echo $Toplam % 10 === 0 ? 'Doğru Kart Numarası' : 'Geçersiz Kart Numarası';
}
function RakamKontrol($Numara){
if(strlen($Numara) < 16) echo '16 Haneden Küçük Olamaz';
if(strlen($Numara) > 16) echo '16 Haneden Büyük Olamaz';
if(strlen($Numara) == 16){
echo is_numeric($Numara) ? LuhnKontrol($Numara) : 'Kart Numarası Sadece Sayılardan Oluşabilir';
}
}

// Örnek Bir Master Card : 5555555555554444

RakamKontrol(5555555555554444);
?>
 

 

wmaraci
wmaraci

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
Jelioxe hocam peki bu numaraları nasıl ürettirebilirim.
En büyük sıkıntım o zaten sistemden gelen kart numaralarına baktıgımda verdiğiniz fonksiyon doğruluyor. lakin bir sonraki kart numaraasını nasıl ürettirebilirim

Ek Olarak: Size zahmet veriyorum. kusura bakmayın lütfen...İlginiz içinde ayrıca teşekkür ederim
 

 

KadirCeyhan KadirCeyhan WM Aracı Kullanıcı
  • Üyelik 23.10.2016
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Denizli
  • Ad Soyad K** C**
  • Mesajlar 689
  • Beğeniler 0 / 203
  • Ticaret 6, (%100)
Nasıl ürettirebilirim derken ? Geçerli bir kart numarasımı üretmek istiyorsunuz ? O konuda yardımcı olamam.
 

 

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
Jelioxe hocam sanırım siz olayı ve beni yanlış anladınız.
Kart numarasından kastım Barkomatik yazılımının cari kart oluşturmada kullandıgı bu methodu gelen siparislerde olmayan carileri programa yazmak için kullanmam gerekiyordu.
Geçerlli kart numarası kredi kartı değil cari kart no su hocam

Ek Olarak:

function CariKart($luhnseed){
if (strlen($luhnseed)%2 == 1){
$luhnseed = $luhnseed*10;
}

$luhnnumber = 0;
while ($luhnnumber == 0){
$sum=0;$digit=0;$first=0;$second=0;$x=0;
for ($x=0; $x$digit = substr($luhnseed,$x,1);
if ($x%2 == 0){
$digit *= 2;
if (strlen($digit) == 2){
$digit = substr($digit,0,1) + substr($digit,1,1);
}
}
$sum += $digit;
}
if($sum%10!=0){
$luhnseed = $luhnseed+1;
}
else{
$luhnnumber = 1;
}
}
return($luhnseed);
}



Ürettirmeyi de bu şekilde başardım.
@[Jelioxe](userid:69230) kardeşime ilgi ve alakası için çok teşekkür ederim.
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al