The previous answers seem to have been addressing a rather different (or much more generalized) sort of problem, because as I see this now, we have the following problem statement:

    len = 10; (* let's have 10 to be specific, but this is an arbitrary positive integer *)
    max = 10^3; (* maximum value of numbers in listB *)
    listA = Range[len];
    listB = RandomInteger[{1, max}, len];

Then *of course* a member of `listB` is a member of `listA` if it is less than (or equal to) `len`. So to get the matching numbers we do:

    Pick[listB, # <= len &/@ listB]
    (* {2, 10, 2, 5, 7, 7} *)

And to get the count of that, simply

    Length@%
    (* 6 *)

This is slower than @ciao's answer. However, this is almost 2 orders of magnitude faster:

    Pick[listB, Sign[listB - len - 1], -1]

And this one is a tiny bit slower, but slightly more general (handles negative integers properly):

    Pick[listB, Quotient[listB, len, 1], 0]

Here are the timings for the solutions:

    len = 1000000;
    max = 10000000;
    listA = Range[len];
    listB = RandomInteger[{1, max}, len];
    (Tr[Tally[#1~Join~#2][[;; Length@#1, 2]]] - Length[#1]) &[listA, 
       listB] // AbsoluteTiming // First
    Pick[listB, # <= len & /@ listB] // AbsoluteTiming // First
    Pick[listB, Sign[listB - len - 1], -1] // AbsoluteTiming // First
    Pick[listB, Quotient[listB, len, 1], 0] // AbsoluteTiming // First

    0.556392 (* ciao *)
    0.803501 (* boolean comparison *)
    0.0136436 (* Sign *)
    0.0171063 (* Quotient *)