delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف تحويل فانكشن من الاكسس الى لغة دلفي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
الاخوة الكرام وجدت هذا الفانكشن التالي:

PHP كود :
Function ID_Validation(ByVal SEGEL_NO AsString) AsBoolean
Dim i
, TOT AsInteger
Dim TEMP
, FIN AsString
TOT 
= 0
For i = 1 To 9
If (i = 1) Or (i = 3) Or (i = 5) Or (i = 7) Or (i = 9) Then
TEMP 
= (CInt(Mid(SEGEL_NO, i, 1)) * 2).ToString
If Len(TEMP) = 1 Then
TEMP 
= "0" & (CInt(Mid(SEGEL_NO, i, 1)) * 2).ToString
Else
TEMP = (CInt(Mid(SEGEL_NO, i, 1)) * 2).ToString
EndIf
TOT = TOT + CInt(Mid(TEMP, 1, 1)) + CInt(Mid(TEMP, 2, 1))
Else
TOT = TOT + CInt(Mid(SEGEL_NO, i, 1))
EndIf
Next
IfCStr
(TOT).Length = 1 Then
FIN 
= "0" & TOT
Else
FIN = TOT.ToString
EndIf
ID_Validation = (CInt(Mid(FIN, 2, 1)) = CInt(Mid(SEGEL_NO, 10, 1))) Or (CInt(Mid(SEGEL_NO, 10, 1)) = 10 - CInt(Mid(FIN, 2, 1)))
Return 
ID_Validation
EndFunction 

والذي يفيد في التحقق من صحة ادخال السجل الوطني في السعودية
بحيث اذا وضع الرقم في EDIT يعمل عليه تشيك فاذا كان صحيح قبل او يعرض رسالة بعدم صحة الرقم.

كيف احولة الى لغة الدلفي ؟

تحياتي وتقديري للجميع.
السلام عليكم

هده لغة VB.NET وليس Access

التحويل سهل جدا بدل استعمال Mid...في دلفي مثلا ستستعمل بدلها الدالة Copy...وهكدا وان أردت ماهو جديد ويوفر الوقت تعلم أخي التعابير القياسية فقد تم دعمها كدلك في دلفي مند الاصدار XE
بارك الله فيك ، ياليت لوتساعدني بالتحويل.
أرفق أخي محاولتك كي تتم مساعدتك

CInt دالة تحول نوع من البيانات الى Integer ...في دلفي ستسعمل ما يقابلها ك StrToInt

CStr تقوم بتحويل نوع من البيانات الى String .في دلفي ستسعمل ما يقابلها ك IntToStr
هدا تحويل ..على السريع ...تأكد من صحته

لم أجرب الدالة

PHP كود :
function ID_Validation(SEGEL_NO: string): Boolean;
var 
i, TOT: Integer;
  
TMP, FIN: string;
begin
  TOT 
:= 0;
  for 
i := 1 to 9 do
  
begin
    
if (i = 1) or (i = 3) or (i = 5) or (i = 7) or (i = 9) then
    begin
      TMP 
:= IntToStr(StrToInt(Copy(SEGEL_NO, i, 1)) * 2);
      if 
Length(TMP) = 1 then
        TMP 
:= '0' + IntToStr(StrToInt(Copy(SEGEL_NO, i, 1)) * 2)
      else
        
TMP := IntToStr(StrToInt(Copy(SEGEL_NO, i, 1)) * 2);

      
TOT := TOT + StrToInt(Copy(TMP, 1, 1)) + StrToInt(Copy(TMP, 2, 1));
    
end
    
else
      
TOT := TOT + StrToInt(Copy(SEGEL_NO, i, 1));
  
end;
  if 
Length(IntToStr(TOT)) = 1 then
    FIN 
:= '0' + IntToStr(TOT)
  else
    
FIN := IntToStr(TOT);
  
Result := (StrToInt(Copy(FIN, 2, 1)) = StrToInt(Copy(SEGEL_NO, 10, 1))) or (StrToInt(Copy(SEGEL_NO, 10, 1)) = 10 - StrToInt(Copy(FIN, 2, 1)));
end; 
بارك الله فيك وجزاك الله خير.
جربت الدالة ونجحت لكن لاحظت الرقم التالي: 3212121212 يعتبره صحيح بينما الارقام لدينا تبدأ برقم 1 ورقم 2 فقط.
مع العلم اني جربت نفس الرقم على الكود الاساسي فاعطى نفس النتيجه (يعني ان الكود الاساسي يحمل نفس الخطأ)
فكيف يمكن التعديل عليه ليعتبر الرقم حطأ. والمرفق هو البرنامج
إقتباس :ربت الدالة ونجحت لكن لاحظت الرقم التالي: 3212121212 يعتبره صحيح بينما الارقام لدينا تبدأ برقم 1 ورقم 2 فقط

اوضح أكثر...أنا قمت فقط بالتحويل...دورك الآن أخي ....اطرح محاولتك وسأساندك بما أعرف
الذي فهمته انه في حالة ان الرقم الاول من اليسار لا يساوي واحد او اثنين فإن الرقم خطأ بغض النظر عن باقي عملية الفحص
فاذا كان كذلك فقم بفحص الرقم الاول وبناءا عليه تقرر هل تستمر في عمل الدالة او التوقف والخروج بخطأ
كود :
if (segel_num[1] <> '1' ) or (segel_num[1] <> '2' ) then result:=False Else Begin : : your code here : : : End;
بارك الله في الجميع
اخي الكريم me&delphi
المشكلة اني مبتدء في البرمجة وليس محترف حتى استطيع ان اعدل في الكود فبارك الله في جهودك

اخي الكريم tempuser جربت الكود ولاكن لايعمل بالشكل الصحيح هل يبدو اني اخطأت في كتابته:
كود :
if (edit1.Text[1] <> '1' ) or (edit1.Text[1] <> '2' ) then Begin ShowMessage('بداية الرقم خطأ'); End Else Begin ShowMessage(بداية الرقم صحيح) End;
السلام عليكم

كود :
Function ID_Validation(SEGEL_NO:String):Boolean; var i, TOT:Integer; TEMP, FIN:String; begin TOT := 0; For i := 1 To 9 do begin If (i = 1) Or (i = 3) Or (i = 5) Or (i = 7) Or (i = 9) Then begin TEMP := IntToStr(strtoint(Copy(SEGEL_NO, i, 1)) * 2); If Length(TEMP) = 1 Then TEMP := '0' + TEMP; TOT := TOT + strtoint(Copy(TEMP, 1, 1)) + strtoint(Copy(TEMP, 2, 1)); end Else TOT := TOT + strtoint(Copy(SEGEL_NO, i, 1)); End; If Length(IntToStr(TOT)) = 1 Then FIN := '0' + inttostr(TOT) Else FIN := inttostr(TOT); Result := (StrToInt(Copy(FIN, 2, 1)) = StrToInt(Copy(SEGEL_NO, 10, 1))) Or (StrToInt(Copy(SEGEL_NO, 10, 1)) = 10 - StrToInt(Copy(FIN, 2, 1))) end;
الصفحات : 1 2