Yes that's exactly what I mean. However I can't solve 2 problems on this kind of approach, first it's not within a range (e.g. 1 and 144) and secondly I'm not sure every number has the same probably to come out.
The first is easy to solve. Get a result that's sufficiently fine-grained and in the range [0,1). Then scale up by X and round up.
You can add randomness by pushing your number through a cryptographic hash function and treating the result as a binary number in the range [0,1).
{ x : a < x && x < b } <=> (a,b)
{ x : a <=x && x < b } <=> [a,b)
{ x : a < x && x <=b } <=> (a,b]
{ x : a <=x && x <=b } <=> [a,b]
In the example above the questioner is asking about getting a number in the range 1 to X inclusive. That would be [1,X]. Random number generators can return numbers in the range 0 to 1, including 0, not including 1. You can write that as [0,1).If you want an integer n in [1,X] and you get reals r [0,1), you can create a function:
f : [0,1) -> [1,X], f(r) = 1+floor(X*r)
Always check the endpoints, and the expected frequencies.