Delphi Can

Orjinalini görmek için tıklayınız: HES Kodu Sorgulaması hakkında
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3 4
(17-11-2020, Saat: 14:26)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@Halil Han BADEM'i paylaşımları için takdir ediyor ve desteği için teşekkürlerimi sunuyorum.

Bu paylaşımda kendisi de aslında hak verecektir, E-Devlet erişim bilgilerinin kapalı EXE içerisinde sunmak çok ama çok tehlikelidir. 
E-Devlet bilgilerimiz kişiye özel olduğundan yasal olarak da bu tip paylaşımları tasvip etmiyorum. Önce bunun altını çizeyim.

Paylaşım yaptığım ve araştırdığım konu tümüyle, "Sağlık Bakanlığı HES kodu sorgulaması" üzerinden - KİŞİSEL HERHANGİ BİR VERİ GÖNDERMEKSİZİN - HES kodu sorgusu üzerine idi.

Sağlık Bakanlığı bu takibi TCKimlik no üzerinden yapabilecek iken, HES kodu gibi bir çözüme başvurmasının sebeplerinden birisi de bu olmalı diye düşünüyorum.
Bu amaç kişilerin TCKimlik bilgilerini dahi karşı tarafa vermesinin önüne geçilmesi içindir. 

Çözüme ilişkin paylaşımım ise şu şekilde: Sadece kendi projelerinizde kendinizi yazacağı kod olarak değerlendirmenizi salık veririm. Üçüncü parti kullanımlar tümüyle hukuksuzdur.  
Bu yapı forumda da sıkça paylaştığımız basit birer HTML parse işlemidir.

Not: Salt yapıyı veriyorum, kontroller ile donatılabilir.

function HesKoduByEDevlet( TCKimlikNo, EDevletParola: String; HESKoduListesi: String; aWebBrowser: TWebBrowser ): String;
 procedure WaitFor( aKey: String );
 var
   Content : String;
 begin
   Content := '';
   while (Pos( aKey, Content ) = 0) do
   begin
     try Content := aWebBrowser.OleObject.Document.Body.InnerHtml; except end;
     Sleep(100);
     Application.ProcessMessages;
   end;
 end;
Const
 URL_EDevletLogin  = 'https://giris.turkiye.gov.tr/Giris/e-Devlet-Sifresi';
 URL_HesKodu       = 'https://www.turkiye.gov.tr/saglik-bakanligi-hes-kodu-sorgulama';
var
 HESContent  : String;
 aList       : TStringList;
 aIdx        : Integer;
begin
 aList := TStringList.Create;
 aList.Text := HESKoduListesi;
 try
   // Login İşlemi //
   aWebBrowser.Navigate( URL_EDevletLogin );
   while aWebBrowser.ReadyState <> READYSTATE_COMPLETE do
   begin
     Sleep(100);
     Application.ProcessMessages;
   end;
   aWebBrowser.OleObject.Document.GetElementById('tridField').Value    := TCKimlikNo;
   aWebBrowser.OleObject.Document.GetElementById('egpField').Value     := EDevletParola;
   aWebBrowser.OleObject.Document.getElementsByName('submitButton').item(0).click;

 WaitFor( 'Kullanıcı Menüsü' );

   for aIdx := 0 to aList.Count-1 do
   begin
     // HES Kodu Giriş Sayfasına Geçiş İşlemi //
     aWebBrowser.Navigate( URL_HesKodu );
     while aWebBrowser.ReadyState <> READYSTATE_COMPLETE do
     begin
       Sleep(100);
       Application.ProcessMessages;
     end;

     // HES Kodu Sorgulama İşlemi //
     aWebBrowser.OleObject.Document.GetElementById('hes_kodu').Value     := aList[aIdx];
     aWebBrowser.OleObject.Document.forms.item(1).Submit;

   WaitFor( '>Yeni Sorgu<' );

     // HES Kodu Sorgu Sonucu Parse İşlemi //
     HESContent := aWebBrowser.OleObject.Document.Body.InnerHtml;
       System.Delete( HESContent, 1, Pos('>Yeni Sorgu<', HESContent)  + Length('>Yeni Sorgu<')-1  );

     if Pos('>Sağlık Bilgileri<', HESContent ) > 0 then
     begin // Kod Geçerli Detay Bilgi
       System.Delete( HESContent, 1, Pos('>Risk Durumu<', HESContent) + Length('>Risk Durumu<')-1 );
       System.Delete( HESContent, 1, Pos('<dd>', HESContent) + Length('<dd>')-1  );
     end else
     begin // Kod Geçersiz mesajı döndürelim..
       System.Delete( HESContent, 1, Pos('<span>', HESContent) + Length('<span>')-1 );
     end;
     aList[aIdx] :=  aList[aIdx] + '|' + Copy( HESContent, 1, Pos('<', HESContent)-1 );
   end;
   Result := aList.Text;
 finally
   aList.Free;
 end;
end;



Örnek kullanım :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
aListe : TStringList;
begin
aListe := TStringList.Create;
try
  aListe.Add( 'N3X9-5127-12' );
  aListe.Add( 'R7T1-7513-19' );
                               //
  aListe.Text := HesKoduByEDevlet( 'tckimlik_numaranız', 'edevlet_parolanız', aListe.Text, WebBrowser1 );
  Showmessage( aListe.Text );
finally
  aListe.Free;
end;
end;

Merhaba,

O zaman paylaşımınız ile beraber bendeki uygulamanın kaynak kod paylaşımını durdurmuş olayım.

İyi çalışmalar dilerim.
@Halil Han BADEM kırıldığınızı değerlendiriyorum ama hiç gerek yok.

Paylaşıp paylaşmamak sizin tasarrufunuzdadır. Hepimiz belirli bir eğitim seviyesinde insanlarız, konu açık kaynak kod paylaşımınız ile ilgili olmadığını bildiğinize emin olmakla birlikte duygusal yaklaşmanıza lüzum yok.

Bu tip hassas konularda EXE paylaşımından ziyade açık kaynak paylaşımı önemlidir. Bunu yaptığınız sürece her yazılımcı kendi çözümünü kendi yazılımı içerisinde zaten güvenle kullanacaktır.
(17-11-2020, Saat: 14:36)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@Halil Han BADEM kırıldığınızı değerlendiriyorum ama hiç gerek yok.

Paylaşıp paylaşmamak sizin tasarrufunuzdadır. Hepimiz belirli bir eğitim seviyesinde insanlarız, konu açık kaynak kod paylaşımınız ile ilgili olmadığını bildiğinize emin olmakla birlikte duygusal yaklaşmanıza lüzum yok.

Bu tip hassas konularda EXE paylaşımından ziyade açık kaynak paylaşımı önemlidir. Bunu yaptığınız sürece her yazılımcı kendi çözümünü kendi yazılımı içerisinde zaten güvenle kullanacaktır.

Hocam onunla alakası yok; aynı yöntem olduğu için aynı mantığı tekrar paylaşmaya gerek yok. Kırılacak bir husus ortada yok.
@Halil Han BADEM sevindim.

Uzun zamandır iş yoğunluğu nedeniyle foruma uğrayamıyordum, @SuperJumbo mesaj yollamış konu ile ilgili gelişme var mı diye onu görünce yazayım dedim.

Teşekkürler.
(17-11-2020, Saat: 14:26)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@Halil Han BADEM'i paylaşımları için takdir ediyor ve desteği için teşekkürlerimi sunuyorum.

Bu paylaşımda kendisi de aslında hak verecektir, E-Devlet erişim bilgilerinin kapalı EXE içerisinde sunmak çok ama çok tehlikelidir. 
E-Devlet bilgilerimiz kişiye özel olduğundan yasal olarak da bu tip paylaşımları tasvip etmiyorum. Önce bunun altını çizeyim.

Paylaşım yaptığım ve araştırdığım konu tümüyle, "Sağlık Bakanlığı HES kodu sorgulaması" üzerinden - KİŞİSEL HERHANGİ BİR VERİ GÖNDERMEKSİZİN - HES kodu sorgusu üzerine idi.

Sağlık Bakanlığı bu takibi TCKimlik no üzerinden yapabilecek iken, HES kodu gibi bir çözüme başvurmasının sebeplerinden birisi de bu olmalı diye düşünüyorum.
Bu amaç kişilerin TCKimlik bilgilerini dahi karşı tarafa vermesinin önüne geçilmesi içindir. 

Çözüme ilişkin paylaşımım ise şu şekilde: Sadece kendi projelerinizde kendinizi yazacağı kod olarak değerlendirmenizi salık veririm. Üçüncü parti kullanımlar tümüyle hukuksuzdur.  
Bu yapı forumda da sıkça paylaştığımız basit birer HTML parse işlemidir.

Not: Salt yapıyı veriyorum, kontroller ile donatılabilir.

function HesKoduByEDevlet( TCKimlikNo, EDevletParola: String; HESKoduListesi: String; aWebBrowser: TWebBrowser ): String;
 procedure WaitFor( aKey: String );
 var
   Content : String;
 begin
   Content := '';
   while (Pos( aKey, Content ) = 0) do
   begin
     try Content := aWebBrowser.OleObject.Document.Body.InnerHtml; except end;
     Sleep(100);
     Application.ProcessMessages;
   end;
 end;
Const
 URL_EDevletLogin  = 'https://giris.turkiye.gov.tr/Giris/e-Devlet-Sifresi';
 URL_HesKodu       = 'https://www.turkiye.gov.tr/saglik-bakanligi-hes-kodu-sorgulama';
var
 HESContent  : String;
 aList       : TStringList;
 aIdx        : Integer;
begin
 aList := TStringList.Create;
 aList.Text := HESKoduListesi;
 try
   // Login İşlemi //
   aWebBrowser.Navigate( URL_EDevletLogin );
   while aWebBrowser.ReadyState <> READYSTATE_COMPLETE do
   begin
     Sleep(100);
     Application.ProcessMessages;
   end;
   aWebBrowser.OleObject.Document.GetElementById('tridField').Value    := TCKimlikNo;
   aWebBrowser.OleObject.Document.GetElementById('egpField').Value     := EDevletParola;
   aWebBrowser.OleObject.Document.getElementsByName('submitButton').item(0).click;

 WaitFor( 'Kullanıcı Menüsü' );

   for aIdx := 0 to aList.Count-1 do
   begin
     // HES Kodu Giriş Sayfasına Geçiş İşlemi //
     aWebBrowser.Navigate( URL_HesKodu );
     while aWebBrowser.ReadyState <> READYSTATE_COMPLETE do
     begin
       Sleep(100);
       Application.ProcessMessages;
     end;

     // HES Kodu Sorgulama İşlemi //
     aWebBrowser.OleObject.Document.GetElementById('hes_kodu').Value     := aList[aIdx];
     aWebBrowser.OleObject.Document.forms.item(1).Submit;

   WaitFor( '>Yeni Sorgu<' );

     // HES Kodu Sorgu Sonucu Parse İşlemi //
     HESContent := aWebBrowser.OleObject.Document.Body.InnerHtml;
       System.Delete( HESContent, 1, Pos('>Yeni Sorgu<', HESContent)  + Length('>Yeni Sorgu<')-1  );

     if Pos('>Sağlık Bilgileri<', HESContent ) > 0 then
     begin // Kod Geçerli Detay Bilgi
       System.Delete( HESContent, 1, Pos('>Risk Durumu<', HESContent) + Length('>Risk Durumu<')-1 );
       System.Delete( HESContent, 1, Pos('<dd>', HESContent) + Length('<dd>')-1  );
     end else
     begin // Kod Geçersiz mesajı döndürelim..
       System.Delete( HESContent, 1, Pos('<span>', HESContent) + Length('<span>')-1 );
     end;
     aList[aIdx] :=  aList[aIdx] + '|' + Copy( HESContent, 1, Pos('<', HESContent)-1 );
   end;
   Result := aList.Text;
 finally
   aList.Free;
 end;
end;



Örnek kullanım :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
aListe : TStringList;
begin
aListe := TStringList.Create;
try
  aListe.Add( 'N3X9-5127-12' );
  aListe.Add( 'R7T1-7513-19' );
                               //
  aListe.Text := HesKoduByEDevlet( 'tckimlik_numaranız', 'edevlet_parolanız', aListe.Text, WebBrowser1 );
  Showmessage( aListe.Text );
finally
  aListe.Free;
end;
end;

Birinin TC kimlik numarası üzerinden bu tür bilgileri sorgulamak sanırım hak ihlali. Karşı tarafın razı olması gerekiyor. HES kodunu da belirli süre alabilme durumu de benzer şekilde. Sizin HES kodunu biliyorsam ve bu kod hiç bir zaman sona ermeyecekse TC kimlikten farkı kalmıyor.
@engerex sana sonuna kadar hak veriyorum. İşte tam bu nedenle sadece kendiniz kullanasınız diye açık kaynak kodlu olmasını savundum ve altını kalın çizgiler ile çizdim. 

* HES kodu sınırsız alsanız da adınıza kayıtlı telefon numaraları, kayıtlı taşınır taşınmaz malları, açılmış lehte veya aleyhte davaları, gelir idaresi borç / alacak vs. okul ve daha sayamayacağım kadar çok kapıya erişim vermiyor.

* Tabii gönül ister ki amacına göre sınırlı kullanılsa. Mesela ben bu kodu TV çekimleri için veya protokol işlerinde görev aldığım/alacağım süre kadarlık zaman dilimiyle sınırlı olarak alıyorum. Alması SMS ile üç parametre ile çok kolay. Copy/ Paste yapınca sadece sondaki gün sayısını yazmak ile daha da kolay.

* Başkası veya başkalarının size bu kodu gerekçeli olarak kontrol/teyit için size verdiğini varsaymak durumundayız.  Idea
(15-10-2020, Saat: 10:39)SercanTEK Adlı Kullanıcıdan Alıntı: [ -> ]
(12-10-2020, Saat: 20:04)sunye Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,

eğer reklama giriyorsa silebilirim.

heskontrol.com üzerinden bu hizmeti kullanabilirsiniz.

hocam bunun resmi kanalda geçerliliği var mı ? bakanlıkta bu şekilde doğrulama şekli yok çünkü. 500 çalışan altındakiler için excel ile edevlet üzerinden varmış yada mobil uygulama ile tek tek varmış. HES destek bana bu şekide bilgi aktardı.

Biz ulaştırma bakanlığının UETDS yolcu ve yük bildirim sistemine geliştirme yapıyoruz. HES kodu tüm yolcu taşımacılığı yapan firmalara zorunlu hale gelince bizimle de WDSL paylaştılar. Bu wdsl üzerinden sorgulama yapıyoruz. Kullanıcının TC Kimlik numarası ve HES Kodu eşleşiyorsa sorgulama çalışıyor.
@sunye acaba  
ücret ödemesi isteniyor mu? Bizlere de açık olabiliyor mu? 

Ben şimdilik aşağıda verdiğim görsel ile (yukarıda paylaştığım kod ile çalışan) ücret ödeme şartını atlayarak işimi gören uygulama hazırladım, onunla görüyorum. 

* Opsiyonlar 
1. Direkt Win32 uygulama üzerinden sorgu yapılabilir, 
2. Herhangi bir browser ile WebServis bünyesindeki basit bir html sayfadan giriş yapılarak POST /submit ile sorgu yapılabilir, 
3. Herhangi bir browser ile GET ile direk adres satırında basit text sorgusu yapılabilir.     



xu6lvby8q7wbldezlrdf.gif
Üstat çok iyi olmuş elinize sağlık dosyayı paylaşmayı düşünüyormusunuz ?

(06-12-2020, Saat: 01:08)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@sunye  acaba  
ücret ödemesi isteniyor mu? Bizlere de açık olabiliyor mu? 

Ben şimdilik aşağıda verdiğim görsel ile (yukarıda paylaştığım kod ile çalışan) ücret ödeme şartını atlayarak işimi gören uygulama hazırladım, onunla görüyorum. 

* Opsiyonlar 
1. Direkt Win32 uygulama üzerinden sorgu yapılabilir, 
2. Herhangi bir browser ile WebServis bünyesindeki basit bir html sayfadan giriş yapılarak POST /submit ile sorgu yapılabilir, 
3. Herhangi bir browser ile GET ile direk adres satırında basit text sorgusu yapılabilir.     



xu6lvby8q7wbldezlrdf.gif
Üstadım beğendiğine sevindim.

* Paylaşma konusunda bu başlıktaki ilk mesajım ile çelişir. Proje Kurumsal ERP projemin bir modülü olduğundan özel bilgiler var. 

Zaten bunun kaynak kodlarının tümünü paylaştım.

* HES kodu için bu okuduğunuz başlık.
* WSDL bozması WEB Servis için bu delphican linki 
* Gerisi makyaj ve daha önce başka linktlerde paylaştığım küçük kodlar...
Sayfalar: 1 2 3 4