You are on page 1of 6

#include <iostream>

#include <cmath>
#include <cassert>
using namespace std;

void test_authorize_user ( );
bool authorize_user (int);
void decode_line( );
char compute_key();
char decode_word(int, char, char, char, char);

int main ( )
{
int ID_number;

// test_authorize_user( );
\

cout << "Enter user ID: ";


cin >> ID_number;

if (authorize_user(ID_number))
{
cout << endl << "Welcome, " << ID_number << endl;
cout << "*** Ready to decode messages ***" << endl;
decode_line ();
cout << endl;

decode_line ();
cout << endl;
// cout << endl;
\

}
else
{
cout << endl << "Sorry, " << ID_number << " is not valid." << endl;
cout << "You are not authorized to use this program." << endl;
}
return 0;
}

//******************************************************************
\

void decode_line ( )
{
//cout << "decode_line stub -- coming soon" << endl;

compute_key();
//decode_word ();

return;
}

//******************************************************************
\

char compute_key()
{
char first_letter;
char first_integer;
char second_letter;
char second_integer;
char third_letter;
char third_integer;
char fourth_letter;

int key_three_digits;
int key_three_digits_cubed;
int key_fifth_sixth_decimal_digits;
int key_fifth_sixth_digits;
int key_fifth_digit;
int key_sixth_digit;
int key;

// ASCII - 48

int ascii_one;
int ascii_two;
int ascii_three;

char letters;

cin >> first_letter >> first_integer >> second_letter >> second_integer >>
third_letter >> third_integer >> fourth_letter;

ascii_one = third_integer - 48;


ascii_two = second_integer - 48;
ascii_three = first_integer - 48;
key_three_digits = (ascii_one * 100) + (ascii_two * 10) + ascii_three;
key_three_digits_cubed = pow(key_three_digits, 3);
key_fifth_sixth_decimal_digits = key_three_digits_cubed / 10000;
key_fifth_sixth_digits = key_fifth_sixth_decimal_digits % 100;
key_fifth_digit = key_fifth_sixth_digits % 10;
key_sixth_digit = key_fifth_sixth_digits / 10;

key = (key_fifth_digit * 10) + key_sixth_digit;

letters = decode_word(key, first_letter, second_letter, third_letter,


fourth_letter);

//cout << key;

return letters;
}

char decode_word(int key, char first_letter, char second_letter, char third_letter,


char fourth_letter)
{
int ascii_first_letter;
int ascii_second_letter;
int ascii_third_letter;
int ascii_fourth_letter;

char final_first_letter;
char final_second_letter;
char final_third_letter;
char final_fourth_letter;

char all;

ascii_first_letter = (static_cast<int>(first_letter) + key) % 95;


ascii_second_letter = (static_cast<int>(second_letter) + key + 5) % 95 + 95;
ascii_third_letter = (static_cast<int>(third_letter) + key + 3) % 95 + 95;
ascii_fourth_letter = (static_cast<int>(fourth_letter) + key + 1) % 95 + 95;

final_first_letter = (static_cast<char>(ascii_first_letter));
final_second_letter = (static_cast<char>(ascii_second_letter));
final_third_letter = (static_cast<char>(ascii_third_letter));
final_fourth_letter = (static_cast<char>(ascii_fourth_letter));

cout << final_first_letter << final_second_letter << final_third_letter <<


final_fourth_letter << endl;
all = final_first_letter + final_second_letter + final_third_letter +
final_fourth_letter;

return all;
}

bool authorize_user (int ID)


{
//cout << "authorize_user stub -- coming soon" << endl;

int seventh_digit;
int remaining_six_digits;
int sixth_digit;
int remaining_five_digits;
int fifth_digit;
int remaining_four_digits;
int middle_digits;
int remaining_two_digits;
int second_digit;
int first_digit;
int total;
int check_digit;

seventh_digit = ID / 1000000;
remaining_six_digits = ID % 1000000;
sixth_digit = remaining_six_digits / 100000;
remaining_five_digits = remaining_six_digits % 100000;
fifth_digit = remaining_five_digits / 10000;
remaining_four_digits = remaining_five_digits % 10000;
middle_digits = remaining_four_digits / 100;
remaining_two_digits = remaining_four_digits % 100;
second_digit = remaining_two_digits / 10;
first_digit = remaining_two_digits % 10;

total = (6 * sixth_digit) + (5 * fifth_digit) + (middle_digits * middle_digits) +


(2 * second_digit + first_digit);

check_digit = total % 11;


bool correct_user(ID);
if (check_digit != seventh_digit)
{
correct_user = false;

}
else
{
correct_user = true;
}

return correct_user;
}

//******************************************************************
\

void test_authorize_user ( )
{

cout << "ID = " << 7327185 << " is not valid *** authorize_user says:"
<< endl;
assert (authorize_user (7327185) == false);
cout << "\t\tinvalid - Test passed" << endl;

cout << "ID = " << 7237185 << " is valid *** authorize_user says:" << endl;
assert (authorize_user (7237185) == true);
cout << "\t\tvalid - Test passed" << endl;

cout << "ID = " << 111111 << " is not valid *** authorize_user says:"
<< endl;
assert (authorize_user (111111) == false);
cout << "\t\tinvalid - Test passed" << endl;

cout << "ID = " << 123456789 << " is not valid *** authorize_user says:"
<< endl;
assert (authorize_user (123456789) == false);
cout << "\t\tinvalid - Test passed" << endl;

cout << "ID = " << 10111118 << " is not valid *** authorize_user says:"
<< endl;
assert (authorize_user (10111118) == false);
cout << "\t\tinvalid - Test passed" << endl;

cout << "ID = " << 3111111 << " is valid *** authorize_user says:" << endl;
assert (authorize_user (3111111) == true);
cout << "\t\tvalid - Test passed" << endl;

return;
}

You might also like