السلام عليكم
ممكن تقبلوني كعضوة جديدة في هذا المنتدى الرائع.
في الواقع عندي مشكلة في انشاء و تنفيذ هذا البرنامج واريد المساعدة منكم لوسمحتم
المطلوب هو عمل برنامج لفحص ما اذا كان Credit card number صالح ام لا ويجب ان يكون هذا الرقم مكون من 13 الى 16 رقم.هذا الكرت بيكون فيزا كرت اذا بدأ برقم 4 , و ماستر كرت اذا بدأ برقم 5. وبالرقمين 37 اذا كان American Express cards, وبرقم 6 اذا كان Discover Cards.
طبعا بعد ما يدخل المستخدم رقم الكرت يقوم البرنامج بمضاعفة كل ثاني رقم من الكرت ابتداء من اليمين واذا كان حاصل الضرب مكون من رقمين يقوم البرنامج بجمع الرقمين مثلا اذا كان هذا رقم الكرت 4388576018402625 هذا الرنامج بيعمل الاتي
2*2=4
2*2=4
2*4=8
2*1=2
2*6=12(2+1)
2*5=10(0+1)
2*8=16(6+1)
2*4=8
ويقوم بجمع كل هذه الارقام التي حصلنا عليها من الخطوه السابقة 4+4+8+2+3+1+7+8=37
3)بعد ذلك يقوم بجمع كل الارقام من الاماكن الفردية ابتداءً من اليمين يعني 5+6+0+8+0+7+8+3 =37
4) اذا كان الرقمين الناتجين من الخطوتين الثانية والثالثة صحيح يعتبر هذا الكرت صالح واذا كان غير ذلك فهو غير صالح
انا حاولت في هذا البرنامج بس ما طلع معي ف ارجوا مساعدتكم
وعفواً على الاطاله
هذا هو الكود
/*
*Coder: SI
*Date:Jan.16-2010
*Purpose: Credit Card number Validation
*PosudoCode: 1)Create a program to let the user enter the credit card number as a long ingeger
* 2)The cardNumber length has to be between 13 and 16 digits
* 3)Return true if the card number is valid.
* 4)Return the summition of the the even places
* 5)Return the digit that we doubled it by multyplying the number with 2
* 6)Return the summition of the odd numbers
*/
package secondsemesterassignment1;
import java.io.*;
import java.io.InputStreamReader;
import java.util.Scanner;
public class CardNumber {
public static void main(String[]args){
// long number = 1246L;
long number = 1246L;
Scanner input= new Scanner(System.in);
// String cardNumber = String.valueOf(number);
System.out.println("Please enter your card number: " );
String cardNumber = String.valueOf(number);
InputStreamReader isr= new InputStreamReader(System.in);
BufferedReader keyb= new BufferedReader(isr);
cardNumber = keyb.readLine();//how to make the buffer read the nuber that I have entered?
char[]c=cardNumber.toCharArray(); //to consider the numberes as a char not string
// int i=cardNumber.length()-2;
int i = cardNumber.length()-1;
while(i>2)
{ //make the program read the number that we have entered
//int digit;
//digit = cardNumber * 2;
//i=i-2; //decrement i by 2
i = i-1;
}//end while
if (cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
||cardNumber.length()==16 && cardNumber.startsWith("4")){
System.out.println("Visa cards");}//end if1
if( cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
||cardNumber.length()==16&& cardNumber.startsWith("5")){
System.out.println("Master cards");}//end if2
if(cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
||cardNumber.length()==16 && cardNumber.startsWith("37")){
System.out.println("American Exprss cards");}//end if3
if(cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
||cardNumber.length()==16 && cardNumber.startsWith("6")){
System.out.print("Discover cards");}//end if4
CardNumber.isValid(number);
CardNumber.sumOfEvenPlace(number);
CardNumber.getDigit(i);
CardNumber.somOfOddPlace(number);
}//end main
public static int getDigit(int i) {
int digit;
int []number;
number = new int[number.length];
while(i>2)
{
//make the program read the number that we entered
digit = number.length-1 * 2;
i = i-1;
}//end while
return digit;
}//end getDigit method
public static int sumOfEvenPlace(long number) {
int sum,a;
sum=0;
String digit;
sum = sum+digit;
if (digit >9){
a=digit.substring(0)+ digit.substring(1);
sum = sum+digit;
}//end if
return sum;
}
public static long somOfOddPlace(long cardNumber) {
long[] cardNum;
cardNum = new long[16];
int oddPlace=0,sum=0;
int i=cardNum.length;
while(i%2!=0){
oddPlace=i-1;
i--;
}//end while loop
sum= sum+oddPlace;
return sum;
}//end somOfOddPlace method
public static boolean isValid(long number) {
/*To convert the cardNumber from string to boolean*/
String cardNumber1;
if (CardNumber.sumOfEvenPlace(sum)== CardNumber.somOfOddPlace(sum))
return true;
else return false;
}//end isValid method
}//end class