Q:

Error : Operator is not overloaded

I've created a simple block of code using Free Pascal to validate an  ID number such as Abc123 being input. 
When I try to run the program I get an error saying, "Operator is not overloaded" at the points where it says,           
 IF not (Ucase in Upper) or (Lcase in Lower) or (Num in Int) then

Specifically where the "in" appears.
Does anyone have any idea why the error occurs and what I can do to solve it?
Thanks!
Program CheckChar;

VAR
UserID, LCase, UCase, Num : String;
readkey : char;
L  : Integer;

CONST
Upper = ['A'..'Z'];
Lower = ['a'..'z'];
Int   = ['0'..'9'];

Begin
Write('Enter UserID ');Readln(UserID);
Ucase := Copy(UserID,1,1);
LCase := Copy(UserID,2,1);
Num   := Copy(UserID,3,2);
L     := Length(UserID);

  While L = 6 Do
  Begin
    IF not (Ucase in Upper) or (Lcase in Lower) or (Num in Int) then
    Begin
    Writeln('Invalid Input');
    End;
 Else
   Writeln('Input is valid');

  End;

 readln(readkey);
 End.

A:

in is used to test the presence of an element in a set. Here you set is a set of char, so the element to test must also be a char. In your sample the elements you tested were some strings (UCase, LCase and Num) which caused the error message.
You have to use a slice of Ucase and LCase of length one or you can also directly take a single character (astring[index]) instead of copying with Copy.
Also your while loop is totally useless. You have to test only 6 characters so let's unroll the loop instead of puting some complexity while obsvioulsy you just start learning.
Finally, one way to write your checker correctly is so:
Program CheckChar;
var
  UserID  : string;
  readkey : char;
  L  : Integer;
  invalid: boolean;

const
  Upper = ['A'..'Z'];
  Lower = ['a'..'z'];
  Int   = ['0'..'9'];

begin
  Write('Enter UserID ');
  Readln(UserID);
  L := length(UserId);

  if L <> 6 then invalid := true
  else
  begin
    invalid :=  not (UserID[1] in Upper) or // take a single char, usable with in
                not (UserID[2] in Lower) or // ditto
                not (UserID[3] in Lower) or // ditto
                not (UserID[4] in Int) or // ditto
                not (UserID[5] in Int) or // ditto
                not (UserID[6] in Int); // ditto
  end;

  if invalid then
    Writeln('Invalid Input')
  else
   Writeln('Input is valid');

 readln(readkey);
end.

