2016-08-08 34 views
1

Ich mache ein Programm, in dem Produkte nach der Chargennummer gesucht werden. Ich möchte, dass die Chargennummer ein zufälliger 6-stelliger Code ist, beginnend mit 00, zum Beispiel 002142; Im Moment macht es nur einen zufälligen 6-stelligen Code. Hier ist der Code, den ich versucht habe:C# brauche eine sechsstellige Nummer, beginnend mit zwei 0's

public string getRandomNumber() 
    { 
     Random random = new Random(100000); 
     string randomNumber = random.Next(999999).ToString("D6"); 
     return randomNumber; 
    } 
+3

Sie brauchen also einen 4-stelligen Code mit dem Präfix 2 Nullen? Also "00" + Zufall (9999) .ToString() .... – BugFinder

+0

So können Sie etwas tun, "string.Join (" ", Enumerable.Range (0, 6). Wählen Sie (x => rnd.Next (0, 9))) 'die 6 Zahlen zusammenkommen wird, dann können Sie einfach '00' –

+0

@BugFinder falsch vorgeben. Zufällig.Weiter (9999) könnte 1 – Steve

Antwort

2

Warum erstellen alle 6-stellig? Was wirklich benötigt wird, ist create 4 und concat.

int random = new Random().Next(1000, 9999); 
string code = "00" + random.ToString(); 

EDIT:

Dank für die Kennzeichnung als richtige Antwort, aber mein Code ist falsch. Wenn Sie den Mindestwert nicht an die nächste Methode übergeben, können Sie Zahlen von 1 bis 999 erhalten, die Sie nicht möchten. Ich habe meine Antwort bearbeitet. Ich hoffe, es ist für nichts zu spät.

1

Sie schrieb .Next(999999) so dass ich nehme an, Sie wollen zufällige Werte von 0 bis 999999.

Zuerst sollten Sie 1000000 schreiben, weil .Next() eine Zufallszahl von 0 bis exklusiv bestimmt der Eingabewert.

Dann sollten Sie

ersetzen

string randomNumber = random.Next(1000000).ToString("D6"); 

mit

string randomNumber = random.Next(999999).ToString().PadLeft(6, '0'); 

die fehlenden Ziffern mit 0

1

Eine andere Möglichkeit ist "000000" Format-String (sechs Ziffern zu füllen, führende Nullen sind zwingend):

  • random.Next(10000) - letzten 4 Ziffern sind zufällig
  • ToString("000000")-6 Ziffern zurückgegeben (mindestens 2 führende Nullen)

Implementation

string randomNumber = random.Next(10000).ToString("000000"); 

Ein weiteres Problem ist, dass Sie random nicht lokal deklarieren sollten:

// Simplest, but not thread safe 
private static random = new Random(); 

... 

public static string getRandomNumber() 
{ 
    return random.Next(10000).ToString("000000"); 
} 
+0

das macht die gleiche Nummer jedes Mal – lucycopp

+0

@lucycopp: es hängt davon ab, wo Sie 'random' deklariert haben. Es sollte außerhalb der Methode platziert werden (siehe meine Bearbeitung) –

0

Ich würde so etwas tun:

var rnd = new Random(); // the internal seed is good enough 
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10))); 
return "00" + rndNums; 

Dann können Sie bequem die Menge, die Sie wollen ändern, wie folgt aus:

string GetRandomBatch(int numberOfRandomNumbers) 
{ 
    var rnd = new Random(); // the internal seed is good enough 
    var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9))); 
    return "00" + rndNums; 
} 
0

mit interpolierten String (C# 6.0) können Sie tun es ist wie folgt:

Random random = new Random(); 
string randomNumber = $"00{random.Next(9999)}"; 
3
public string getRandomNumber() 
{ 
    Random random = new Random(); 
    string randomNumber = "00"+random.Next(10000).ToString("D4"); 
    return randomNumber; 
} 

Sie sollten in Random keinen fixen Seed festlegen, da er immer dieselbe Zufallszahlenfolge generiert. Zum Beispiel, wenn Sie Ihre Funktion in einer Schleife aufrufen, wird immer die gleiche Nummer zurückgegeben, also nicht zufällig.

Auch der Parameter in der Funktion Next() ist die obere Grenze exklusiv, also verwenden Sie 10000 statt 9999, so dass Sie 9999 auch als Zufallszahl erhalten können.

0

Ihre ToString("D6") macht genau das, was Sie wollen, aber da Sie eine große obere Grenze für Ihre random.Next überschreiten, wird es in vielen Szenarien nichts zu pad sein.

Wie andere schon angedeutet haben, können Sie "00" Präfix, oder man könnte einfach eine niedrigere Obergrenze gesetzt, da die "D6" Pflege Ihrer Polsterung nehmen:

string randomNumber = random.Next(9999).ToString("D6"); 

Wenn Sie die Nummer immer wollen sein 4 Ziffern und nicht, sagen, "000123", werden Sie eine untere Schranke als auch angeben müssen:

string randomNumber = random.Next(1000, 9999).ToString("D6"); 

beachten Sie auch, dass, wenn Sie einen fest codierten Samen wie in Ihrem Beispiel angeben , Sie erhalten immer die gleiche Zufallszahl zurück.

0

So etwas wird tun.

public static void Main() 
{ 
    Random rnd = new Random(); 
    string Value = rnd.Next(1, 9999).ToString("D6"); 
    Console.WriteLine(Value); 
} 

Oder mit niedriger Möglichkeit wäre die gleiche Anzahl von immer

sein
public static void Main() 
{ 
    Random rnd = new Random(DateTime.Now.Millisecond); 
    string Value = rnd.Next(1, 9999).ToString("D6"); 
    Console.WriteLine(Value); 
} 
1

Sie nah waren. Was Sie wirklich wollen, ist eine zufällige vier Ziffer Nummer, aufgefüllt mit zwei führenden Nullen (bis sechs Stellen). Verwenden Sie also Random.Next(10000).ToString("D6") oder . ToString("000000")
Hinweis jedoch für Zahlen kleiner als 1000, werden Sie mit mehr als zwei führenden Nullen enden. Um dies zu vermeiden, können Sie Random.Next(1000,10000) eingeben, wobei die erste Zahl einschließlich und die zweite exklusiv ist.

Beachten Sie auch, dass die Art und Weise, wie Sie den Zufall initialisieren, falsch ist, wenn Sie diese Methode mehr als einmal aufrufen werden! Machen Sie Ihr Random Objekt zu einem Klassenmitglied (vorzugsweise static) und initialisieren Sie es nur einmal (übergeben Sie nicht 100000 an seinen Konstruktor). Andernfalls, wenn diese Methode mehr als einmal aufgerufen wird, wird jedesmal derselbe Wert zurückgegeben.

Verwenden Sie new Random(). Wenn Sie es auf die gleiche Weise erstellen, muss es eine statische Variable sein (oder mindestens ein Klassenmitglied - jedoch werden für jede Instanz der Klasse dieselben Werte erzeugt)

0
public string RandomNum() 
{ 
    return "00"+ new Random().Next(9999).ToString("D4"); 
} 

Sie können der Funktion Next() auch die minimale und maximale Anzahl geben. Wie:

return "00"+ new Random().Next(1,9999).ToString("D4");