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

نسخة كاملة : حساب مفتاح ccp
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
قمت ببرمجة دالة تقوم بحساب مفتاح ccp
طريقة الحساب
من اليمين إلى السيار(نبدأ الضرب من رقم 4 فما فوق) وانا قمت بالعملية العكسية لان الحساب فيه 10 ارقام
والناتج هو العشرات
PHP كود :
function CleCcp(Str: string): Word;
var
  i: 1..10;
begin
  
for i := 1 to 10 do
    if Length(Str) <> 10 then
      Str 
:= '0' + Str;
  Result := 0;
  for i := 1 to Length(Str) do
    Result := Result + strtoint(Str[i]) * (14 - i);

  Result := Result mod 100;
end; 
PHP كود :
function CleCcp(Str: string): Word;
var
  i: 1..10;
begin
  str 
:= Format('%.*d',[10, strtoint(Str)]);
  Result := 0;
  for i := 1 to 10 do  //  Length(Str)
    Result := Result + strtoint(Str[i]) * (14 - i);

  Result := Result mod 100;
end; 
بعض التعديلات
الاول صحيح لاكن عندما يكون عدد الحروف يساوي 10 لا يخرج من الحلقة
والحل السهل استخدام format
او اضافة Break عند تحقق الشرط
 
PHP كود :
for i := 1 to 10 do
    if Length(Str) <> 10 then
      Str 
:= '0' + Str
    
else
      Break; 


ولحساب Rip يمكن استخدام هذه الفنكسيون


PHP كود :
function CleCcpRip(Str: string): Word;
begin
  result 
:= 97 - ((((StrToInt(Str) mod 97) * 3 mod 97) + 85) mod 97);
end; 
السلام عليكم
بداية الحساب من الأخير و الضرب في 4 تصاعديا دون مراعات طول المفتاح
PHP كود :
function CleCCP(const CCP: string): Integer;
var
  L,I: Integer;
begin
  Result 
:= 0;
  I := 4;
  for L := Length(CCP) downto 1 do
  begin
    Result 
:= Result + StrToInt(CCP[L]) * I;
    Inc(I)
  end;
  Result := Result mod 100;
end; 
هل من الممكن اخي onexite وضع الكود كامل لو سمحتم حتى نتمكن من التتابعة
(04-05-2020, 05:46 PM)bouh25 كتب : [ -> ]هل من الممكن اخي onexite وضع الكود كامل لو سمحتم حتى نتمكن من التتابعة

PHP كود :
program Project1;

{
$APPTYPE CONSOLE}

{
$R *.res}

uses
  System
.SysUtils;

function 
CleCCP(const CCP: string): Integer;
var
  I: Byte;
begin
  Result 
:= 0;
  for I := Length(CCP) downto 1 do
    Result := Result + StrToInt(CCP[I]) * (Length(CCP) - I + 4);
  Result := Result mod 100;
end;

var
  CCP: string;

begin
  
try
  repeat
    Readln
(CCP);
    Writeln('**********************************');
    Writeln(CleCCP(CCP));
  // Readln;
  until False;
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E
: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end. 
(04-05-2020, 11:41 AM)Agmcz كتب : [ -> ]السلام عليكم
بداية الحساب من الأخير و الضرب في 4 تصاعديا دون مراعات طول المفتاح
PHP كود :
function CleCCP(const CCP: string): Integer;
var
  L,I: Integer;
begin
  Result 
:= 0;
  I := 4;
  for L := Length(CCP) downto 1 do
  begin
    Result 
:= Result + StrToInt(CCP[L]) * I;
    Inc(I)
  end;
  Result := Result mod 100;
end; 
يمكن الاستغناء عن متغير I
بهذه الطريقة

PHP كود :
function CleCCP(const CCP: string): Integer;
var
  I: Byte;
begin
  Result 
:= 0;
  for I := Length(CCP) downto 1 do
    Result := Result + StrToInt(CCP[I]) * (Length(CCP) - I + 4);
  Result := Result mod 100;
end; 
في حالة المفتاح يكون رقم واحد يضيف له صفر  ، مثال النتيجة المفتاح 1  يردها 01

PHP كود :
function CleCCP(const CCP: string): string;
var
  I: Byte;
begin
  Result 
:= '0';
  for I := Length(CCP) downto 1 do
    Result := IntToStr( StrToInt(Result) + StrToInt(CCP[I]) * (Length(CCP) - I + 4) );
  Result := IntToStr( StrToInt(Result) mod 100 );

   if Length(Result) = 1 then  Result :=  '0'+  Result;
   
end
; 

لاستدعاء

PHP كود :
Edit2.Text :=  CleCCP(Edit1.Text) ; 
النتيجة غير صحيحة عندي, ربما لم أفهم الدالة.
(05-05-2020, 03:30 PM)sofiane201 كتب : [ -> ]النتيجة غير صحيحة عندي, ربما لم أفهم الدالة.
[صورة: 464566949.png]
هذا ما اتبعته, لكن النتيجة غير صحيحة.
الصفحات : 1 2