×
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
• Talk With Other Members
• Be Notified Of Responses
• Keyword Search
Favorite Forums
• Automated Signatures
• Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

#### Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

# On init of a textbox, insert random numbers and letters

## On init of a textbox, insert random numbers and letters

(OP)
Hello, i think this is pretty straight forward what im trying to achieve but i think its a little harder, i want a textbot to on init insert random letters and numbers into its value, but to keep the "-Racun" at the end, i tried using chatgpt but the codes he gave me were straight up wrong and long as hell, is it hard to achieve this? if someone can do this for me id appreciate it, its not for anything im just having fun trying to create something in my project and i need the random value generator :)
Replies continue below

### RE: On init of a textbox, insert random numbers and letters

What's the goal, uising it as a random unique id? GUID would be well suited for that. For cryptography? Then there are cyptographic providers for random numbers better suited than generating your own random letters.

Anyway, RAND() gives a random number. There's a problem, though, with pseudo randomness:
Start VFP and do this:

#### CODE

For i = 1 to 10
? Rand()
EndFor i 

Start another VFP and do it again, you get the same 10 random numbers.

What that means is any random letters you'd pick by random numbers would also be the same sequence again and again.

A way out of that dilemma exists, just put RAND(-1) somewhere at start, that's enough to randmoize the random number generation. It doesn't change that the random numbers are a computed sequence only pseudo random and there are better ways to generate randomness, if it plays a role.

Well, and how do you get to letters from numbers between 0 and 1? Well, use CHR(65+INT(RAND()*26)) and you get letters from A to Z, because INT(RAND()*26) will be from 0 to 25, never will be 26, as RAND() always is below 1. If you have as many random letters as you want add "-Racun" at the end and that's constant, where's the problem with that?

Chriss

### RE: On init of a textbox, insert random numbers and letters

You could try something like this:

#### CODE

lnNum = 10
&& set this to the number or characters required
RAND(-1)
lcResult = ""
lcValid = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
FOR lnI =1 TO lnNum
lcChar = SUBSTR(lcValid, INT(RAND() * 36), 1)
lcResult = lcResult + lcChar
ENDFOR
this.Value = lcResult + "-Racun" 

I haven't tested this thoroughly, but it should give you a start.

It would be possible to combine some of the lines in the code to make the whole thing a bit shorter. But I have deliberately broken it into simple steps to help you understand it.

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

### RE: On init of a textbox, insert random numbers and letters

(OP)
Yes its for creating unique ids, but i want the same principe, on the init of the textbox, ill see what i can do with what youve provided both :)

### RE: On init of a textbox, insert random numbers and letters

#### Quote:

i tried using chatgpt but the codes he gave me were straight up wrong and long as hell,

You will never develop any programming skills that way. Even if ChatGP turned up some usable code, you will get nowhere by blindly copying it into your program without understanding what it is doing. Despite the marvels of AI, the only way to learn VFP - or any other language - is to study the various command and functions and to work out for yourself how to use them.

(Of course, that doesn't mean that you shouldn't ask for help in this forum when you need it.)

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

### RE: On init of a textbox, insert random numbers and letters

Interesting, Substr(somestring,0,1) does not error, but is empty.

nStartPosition<=0 is not documented, but you get the same as in the documented case where nStartPosition is larger than the length of the string: An empty string.

So you could easily generate too short strings.

Chriss

### RE: On init of a textbox, insert random numbers and letters

By the way, there's an easy way of generating numbers from 0 to x-1 when using MOD, that doesn't require to absolutely know whether RAND() can be 1 in the extreme case or its result is rounded up to 1:

#### CODE

MOD(Rand()*0x100000000,X)
or

#### CODE

Rand()*0x100000000%X

Where X is a whole postitve number >1.

Well, and to push the interval [0, x-1] to [1,x], just add 1:

#### CODE

Rand()*0x100000000%36+1
generates numbers from 1 to 36 without any doubt, because the mod operation generates integer numbers only, always stays in the range 0 to 35, in this case, and thus no matter how high Rand()*0x100000000 is or even whether it would sometimes have decimals, you always stay in the integer range you wish for.

Chriss

### RE: On init of a textbox, insert random numbers and letters

#### Quote (myself)

or even whether it would sometimes have decimals

Well, I should have checked: No.

But INT helps here:

#### CODE

INT(Rand()*0x100000000%36)+1

And if you want to absolutely ensure no outliers, use MIN and MAX on top:

#### CODE

MIN(MAX(1,INT(Rand()*0x100000000%36)+1),36)

Chriss

### RE: On init of a textbox, insert random numbers and letters

Good feedback, Chris. But my code was only intended to give Filip the general idea. In practice, I would have done it a bit differently, but I was aiming to keep it simple.

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

### RE: On init of a textbox, insert random numbers and letters

That said, I see from his later post that what he actually wants is to create unique IDs. He didn't mention that at first. If he had, I wouldn't have wasted my time showing how to create a random string. Oh, well. Not the first time, and certainly not the last.

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

### RE: On init of a textbox, insert random numbers and letters

Mike Gagnon, see the last paragraph in my first post.

Chriss

### RE: On init of a textbox, insert random numbers and letters

Filip,

we've come to a point of an inactive thread. The question then always is, whether you gave up on this or found your way.
Anyway, as we now know you wanted to create a random unique alphanumeric ID there was a related discussion about whether SYS(2015) is usable as an id in thread184-1830311: sys(2015).

To use an alphanumeric value as a unique id has pitfalls. Randomness can be enough, if the value generated is long enough to avoid collisions (duplicate values) by chance. One point is that this never can be guaranteed by randomness alone, as improbable as it becomes with large ranges of values. But you can define the population of a field with a unique value using such an almost never failing generator by reusing it, if the number it generated turns out to be a duplicate of something already generated beforehand. That means, it's enough to have the primary key checking uniqueness and in case of an error just generate one more random ID value.

This would work fairly well and only lead to rare double calls of the random id generator and even less so triple or more calls necessary. The major ingredient is the range of values being very large, 36 different characters 0-9 and a-z, or 62, if you include A-Z, would give exponents of 62 as the number of different values and that easily becoms larger than astronimical numbers already with 10-20 characters. So the chance of double values is essentially zero. But if you think of the extreme case of flipping a coin only giving 2 results, you can have 2 records, one for head and one for tail and you can flip coins as much as you like if the generated values only are either head or tail, there won't ever be a third random value usable as id of a third record, so the vastness of the possible IDs is important.

If you generate a unique value for a database the only two very well defined ways are a sequence number that's only limited to an upper bound or a GUID, in some systems also called UUID. In the SYS(2015) related thread I already indicated some have their doubts, but I'd say it's mostly misunderstandings. Nevertheless there's always the fix to just throw out a double generated ID when encountering it.

It becomes harder if uniqueness should be guaranteed in a distributed system and not from a centralized database system. And the other case that's always hindering usage of one of these two major alternatives is specifications. If the unique id must conform to a specific format for serial numbers of products, for example, or any other norm. You can then use randomly generated strings, just always check whether they are dupllicates by chance by keeping book of them. This could even be included in the generating code keeping track of generated Ids and only returning a random result that was checked against all previous generated results. But I can give you an example of an infinite loop by recursion here, just repeat this paragraph... The problem is a generator used in a distributed system cannot make that check. Duplicates would only show in merging data from the distributed systems, not earlier.

Chriss

### RE: On init of a textbox, insert random numbers and letters

(OP)
Hello,im aware of the thread being innactive, im working on it, i usually read about the things you send me, on other forums and in help of the visual fox pro, so i usually dont test them out right from the jump, but it helped me with getting the idea how to do it, i guess if i just paste the code it will wor regardless.

#### Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

#### Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Close Box

# Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

• Talk To Other Members
• Notification Of Responses To Questions
• Favorite Forums One Click Access
• Keyword Search Of All Posts, And More...

Register now while it's still free!