Come Generare un numero casuale di lunghezza fissa utilizzando JavaScript?

Sto cercando di generare un numero casuale, che deve avere una lunghezza fissa di 6 cifre.

Non so se JavaScript è dato seguito avrebbe mai creare un numero inferiore a 6 cifre?

Math.floor((Math.random()*1000000)+1);

Ho trovato questa domanda e risposta su StackOverflow qui. Ma, è chiaro.

EDIT: ho eseguito il codice sopra un mucchio di volte, e Sì, si crea spesso i numeri inferiori a 6 cifre. C’è un rapido/veloce per assicurarsi che sia sempre esattamente 6 cifre?

InformationsquelleAutor hypermiler | 2014-02-16



14 Replies
  1. 79

    JS:

    console.log(
    
        Math.floor(100000 + Math.random() * 900000)
    
    );

    Crea sempre un numero di 6 cifre e si assicura la prima cifra non potrà mai essere 0. Il codice in questione sarà creare un numero inferiore a 6 cifre.

    • Ehi, hai aggiunto una buona commment. Non vorrei mai che la prima cifra è 0. Un buon punto.
    • Si sarebbe sciolto casualità. Non troppo bene.
    • come tho
    • è necessario generare un numero casuale da 0 a 9, n volte. vedi inviato risposta da me
    • Per rispondere domanda su come aggiungere 100000 che segue indica solo i numeri di cui sopra che sono possibili. L’unico modo possibile per ottenere la vera fissa n lunghezza senza perdita è quello di generare un numero alla volta, n volte. Ne consegue che tutti i numeri al di sopra di 10^n non è possibile. Così, per esempio, un numero casuale di lunghezza fissa 2 10 – 99. 3, 100 – 999. Per 4, 1000 e 9999. Per 5 10000 – 99999, e così via. Come si può vedere, si suggerisce 10% di perdita di randmns. Per numeri davvero grandi ( 18, 24, 48 ) il 10% è ancora un sacco di numeri.
    • Poi si perde anche sulla iniziale pari a zero per tutti questi, che non è se questa è una opzione ( per la password casuali potrebbero essere rilevanti ).
    • egli dice espressamente, che deve essere di 6 cifre senza lo 0 come primo numero (vedi commento sopra)
    • Forse, ma 99.99999% di tutte le persone alla ricerca di questo thread sono qui per altri motivi, la loro ragione, non la sua. Il titolo della domanda è anche più ampio.
    • grazie Funziona come un Chram
    • Voglio stesso con 70 lunghezza cifra

  2. 17

    Solo completamente affidabile risposta che offre una completa casualità, senza perdita. Gli altri prima di questo rispondere a tutte le perde, a seconda del numero di caratteri che si desidera. Il più desiderato, il più perdono la casualità.

    Raggiungere è limitando la quantità di numeri possibili precedente la lunghezza fissa.

    Così, per esempio, un numero casuale di lunghezza fissa 2 10 – 99. 3, 100 – 999. Per 4, 1000 e 9999. Per 5 10000 – 99999, e così via. Come si può vedere dallo schema, si suggerisce il 10% di perdita di casualità perché i numeri prima che non sono possibili. Perché?

    Per numeri davvero grandi ( 18, 24, 48 ) 10% è ancora un sacco di numeri per perdite su.

    function generate(n) {
            var add = 1, max = 12 - add;   //12 is the min safe number Math.random() can generate without it starting to pad the end with zeros.   
    
            if ( n > max ) {
                    return generate(max) + generate(n - max);
            }
    
            max        = Math.pow(10, n+add);
            var min    = max/10; //Math.pow(10, n) basically
            var number = Math.floor( Math.random() * (max - min + 1) ) + min;
    
            return ("" + number).substring(add); 
    }

    Il generatore permette di ~lunghezza infinita, senza perdita di precisione e con il minimo costo in termini di prestazioni.

    Esempio:

    generate(2)
    "03"
    generate(2)
    "72"
    generate(2)
    "20"
    generate(3)
    "301"
    generate(3)
    "436"
    generate(3)
    "015"

    Come si può vedere, anche lo zero sono inclusi inizialmente che è un ulteriori 10% di perdita solo che, oltre al fatto che i numeri prima della 10^n non sono possibili.

    Che ora per un totale del 20%.

    Anche, le altre opzioni hanno un limite superiore al numero di caratteri che si può effettivamente generare.

    Hardcore (lol):

    generate(100000);
    
    "0651381536751559954594864685266964793332464219914923661511711844396177002509535418334876544401924094917073213696256662736759171746155525355813820984082896909515404479432572083119349115959844601455002767695272126890943622034785199462903486615630903373736074650341933983047891115762996521811932187801517891301186904384726119762019718175435710932238346050607608330909038106079638907289974335424918916347390133250423195745981282871695914427143478015387526550643354556230557162085731499833124538228077899015387696795454233963829987328340703344884739850232366267319735437910316929832577036161160111766389779986306750540325053526332954707426521749319245685086246138852076226686592711423547069039829989359264378828053036717401113209577249028130393660800381824348578927107867412974551300511362724049498987060763708244949878691726303643609390144364016831976572032148916321330320693070018092909287513750833169369109704174178477032247944615585736953235426525770952182901723678094125452064709391262205505794896588467103839918798865986558164401714970627462474221512933182302681399770009238608569828198282594067031551589957066160459772535721218782628326984718480572065873099842295277633929431998644299592113453576385173567792887599814962391491057766181804686525454994535331956452351714080296349460787376377707332784374182769767491492626250695553656723782130680555136033698739748989110048095410831112923640685263942718951956051629868800760455527608163584040946391007996727804307183409133475760436780643452539625346136429684905697101047939193048590914919878829383906351337053184913823008300679694028703685623727771499860247737932264827173466218593294990480640551139122803223625353361708900123038017780047641220235742349899490580373913548466797570492357261650370416581586068946910750746456272020039989451556990958758038936686950664094355266620153834909274865405514128481190933769790743330654469775143510701067073238592791899235626861196974193363925127586730787377648334892346319583406971304451718976145383072306413469155987486447356622988426019558465431875505538702558565347559580202646849041387156283262505660125997956398869698806508328747714519622979932186678894485401315173760703884808651627289565546642595836542685648986064356954101696992288261891697786208558024710704710569276399395840580530230729718025713461618331061135991512805033299376252465571484999555923213609948515733572046075843375936972718778384464568891829113564444707717097719585207988502346513167888955683555484353510332395153755395909821566281989562081559052296158702137775090530683411921904165289066506048057826656008626549349520988632955599817667026102612246900688687033297726679175137756611576660839769713756589194642097257515032724723644287567807024460903027237918875450869621587384055399117177199561406778632097959377881722104757305489848832281818424422232658544588293086904471013832617620773148176645007693759497261239127503209456938874072938525618495608073774801776586228941306687157603648217719830741573207094853490260210457990217605600170536198504037929712676654872110771920253815273483354540963203021459754583032672211518949520939438225644651968189817072011400396165500599785252339489882056244086137573020347521044405459170093723855104182434230586691062441396739135676667876492508103316749255705804685196457776485441020566127708427354576129440946667137723266039252799238436908929664871559917271173890952501649969845323228911324304676033091791915543087040187338337985765900657501913326852341426754081753024526806628074157361061567145719925513947877710209406336870076364803110885165116889134514669440038093239844794417558222940044136681059927679868309962907439502915297704409286220631579548570846901779646252916735446700599319216127956590498537500296871549698551487524694730938334435602147792823774342018907256300973661332969751774453467754551030776244984673134327042549212346064016972266244421350446816023749761725326179725773631423251263241676364878077179121265520596533163857823832473659397459170863496209471969573015681099162917804608615592702751630859496460179021996381923016837765373971029344070259758032878342631664623233278865516293215903319598262833063285069029198481899370947051648391946052895356840798550825719722336591850778627364466574843889148095773261912719117480110491748466533525498678000253654834894959160056255689033940722775415886473011808596999471244206729824146278357431053778299946416560280321553991926322558288133660604761058885313628667565782057669777245228782157232415565470266425379986471558087623005877735347590673298523682042211654895539684959898310428673791086684470635130006701184979952716864452222287796185706873800126958417574002714651197052304976945291998261929510003409823301738163131184044321814967421948738077959973418977062820073272801871097791663304563677054446929522613820657158036044974077149068042264275041629991352453921603299417152412504283176126310892490074417066376036263139046485941308078474763782335271468941107500031402589191940264394201058998139384015586420043812700974998994846862783848323459027436711834029982961475394883663440929202466261118224034811753878675892626850000745927102030593859984871338541236857940137673923872330726491463521617428477728693077627246150789224577503974195294720010681235567512991787544000684873076367225265005980170732582210349335893572411614183693449732342550786984026709335344882368848483689841098289521520159842810020191403158597931892038675563703040339560051072485874177869853627258620119850024839239790991752234985493282886483878099220884607098541461828163062036559320051850664311787732545443545872718896705693074322491654059388337598948684563099349286348837258695198691715548293085118800469279568611247763603333212769696312930202331209719311698010959089495486686416701141580902003477739022656317482105542147788152780612039330285858045010109725749512856294226929278452910769275369968190680868822708154750824134942359214079088522653031930479967950106001756666750685834781326854966710709199027624399171678838338771888827826988895147799981407964765904933894198041473605722426155926472549738623915695131607125663472416755760625877192413222392834744760573194698174184828593952615330008182973235328807832466170477548637589334335253898665521398464526370554264342147842986253786980578314778173661019148173130327119873408737701145928515500658351289473328456285583253571413960151165721809937639271102772177604114259723504396074043857324876347952792500778241101315813932920875678857323985024397013308505439799092690329997846663211646708116890679317619633523367148203786872452797721688341649265556212929572302923254328310433097096422518332461522238314853608672131157398326333086636637710579603406236531242797001572404086121679806710619791401430723164752984010278279527256729659512285551846346525670396866491305030366052611420386629486883742338601295651738388001697647924588031892981500198791375362752776720252588049589262755602871270846735355848074534250430763842450204908016408980427882039831985645664399270103577548870120224819919262753016026165808042161240890128034530862386797980786530084995404258139393926242285856891852536101388461974355122811586411039593712363708990011716527704724695088670655140918478826975809560414499747323017065409019926404257362977641295374223246846824885957539038318366351775694121202206592027411031573694626783792527141205298171742811339736677829523571328298430978526492030270747840488062983567775807783758303942162746481495259894565800433588989148287828612636489953375970590336691568227027250830962451881414054532701394664621643793652659730680829782628228533496535022066254538114154750886394448619560557056090587134817765243336371995254731768578145789253081136781165232380981423661461947317624294565206639212050765935523252915568678332631643661404278947432925525662760688013716440760830951338977985068158333504142195975491474394784277375073913171986990582377987023788932860558988769345591421822956624611110395013648711595243092167162020435947799592249978899534215342536996693915479765219927236896875556418267953719666490566732043716962547762237949421980714168709049490782347854273531992819487089637953124284492758086703224352349743348457604761120733409407717030341936948166853948143433242252140863374400359359761306266558395167990712458271078696248819889876229262161656199388341741768515442688241996127565496982533125451938994200226802615272999244312311281180370991298113648307050761656528609111812818519937597989922582427406685845913968542758447240615610624851445680816432319237536466841678179826977061228472796341277749096815972710109141682142923221418300450889934793361752715170330903172203575743719842447552642209440935449303895937582103292344361773281904368852083615740443913930404143052760843333064898204276312372739440829872940436919768751089890247967337557653562879210163728376116079743767005431076841670441616652665636336229550601719325531779966031352898173391372064414093596851879022083272185840692660572194149639642073309095345114511750926138263623153925334192615658113833269237719526076431286320367730048784895945420614793303331120250754465511943883123584365330780388472745790546717486883844283359421247664497558319269087934420398659762073298209204864293120280646068964392658934917828520101658351360993611025135958090490678870508638473725333080789384783828962965033309159983224373031664875078140446422895304505649225445555564873856083488629044065544170858400698317145852209331837824336681551495069563493806386785704595613014667920738126365476692665159557868399438407300571627342425233751037082260963685748505556744991415176134639166352085172285172276758482154203549348712506151634474175365167098576444480905776241930649712981647594243229056955059691154745756909930548211510229291032212725487179388626117741684508226454916634024521067178497321754685991794920486377608095295314368866766826448127047221308873232277567988720647751988098042602089589821325908162267555756542692594698410032948436350206444474395792832337255903951405061202830201036008511147760724244082408881240159333112973046604988816375803715603929856334309755065"
    
    generate(100000).length === 100000 -> true
    • “deve avere una lunghezza fissa di esattamente 6 cifre” … “non voglio che la prima cifra è 0. Un buon punto. – hypermiler”. Ammiro il vostro ingegneria e spingendo la busta, e sono sicuro che questa risposta possa essere utile a qualcun altro, ma solo per dire. Sul lato negativo, il tuo algoritmo è massicciamente ricorsivo e quindi non sono convinto che “permette di ~lunghezza infinita […] con il minimo costo in termini di prestazioni”.
    • è solo ricorsiva se avete bisogno di più numeri di 12, nel qual caso verrà generato 12 numeri alla volta. minimo costo in termini di prestazioni, sì. Lo scopo di questo è l’uso per numeri casuali stringhe, in cui la casualità materie, oppure qual è il contenuto sembra o non. zeri all’inizio era ok per noi. un valido stringa casuale è 0000000123 ma questo non sarà generato in uno qualsiasi degli altri metodi, altri di questo.
  3. 11

    Più in generale, la generazione di un numero intero casuale con lunghezza fissa può essere fatto utilizzando Math.pow:

    var randomFixedInteger = function (length) {
        return Math.floor(Math.pow(10, length-1) + Math.random() * (Math.pow(10, length) - Math.pow(10, length-1) - 1));
    }

    Per rispondere alla domanda: randomFixedInteger(6);

    • Si sarebbe sciolto casualità. Non troppo bene.
    • Migliori e più versatili risposta.
    • Penso che questo non sarebbe fare qualche 0-primo-imbottitura numero, qualcosa di simile a 00382. In modo che non sarebbe esatto casuale per tutte le serie.
  4. 8

    Vorrei andare con questa soluzione:

    Math.floor(Math.random() * 899999 + 100000)
    • OK. Ho capito. SÌ. Che faremo!
    • Se la mia risposta helper voi, si prega di contrassegnare come accettato. Grazie!
  5. 3
    100000 + Math.floor(Math.random() * 900000);

    darà un numero da 100000 a 999999 (compreso).

  6. 2

    Basata sul link che ci hai fornito, la risposta giusta dovrebbe essere

    Matematica.floor(Math.random()*899999+100000);

    Per la matematica.random() restituisce float tra 0 e 1, quindi il numero minimo sarà 100000, max – 999999. Esattamente 6 cifre, come si voleva 🙂

    • Si sarebbe sciolto casualità. Non troppo bene.
  7. 0

    Ho creato il seguente funzione per generare un numero casuale di lunghezza fissa:

    function getRandomNum(length) {
        var randomNum = 
            (Math.pow(10,length).toString().slice(length-1) + 
            Math.floor((Math.random()*Math.pow(10,length))+1).toString()).slice(-length);
        return randomNum;
    }

    Questo sarà essenzialmente aggiungere a 0 all’inizio per rendere la lunghezza del numero richiesto.

  8. 0

    Stavo pensando la stessa cosa, oggi, e allora vai con la soluzione.

    var generateOTP = function(otpLength=6) {
      let baseNumber = Math.pow(10, otpLength -1 );
      let number = Math.floor(Math.random()*baseNumber);
      /*
      Check if number have 0 as first digit
      */
      if (number < baseNumber) {
        number += baseNumber;
      }
      return number;
    };

    Fammi sapere se ha qualche bug. Grazie.

    • Questo è davvero un bug: si fanno il doppio delle probabilità di generare un numero compreso tra 100000 e 199999 rispetto a qualsiasi altro numero.
  9. 0

    “Per Generare un Numero Casuale Utilizzando JS”

    JS:

    console.log(
    Math.floor(Math.random() * 1000000)
    );

    HTML:

    <!DOCTYPE html>
    <html>
    <body>
    
    <h2>JavaScript Math.random()</h2>
    
    <p id="demo"></p>
    
    </body>
    </html>

  10. 0

    Questo è un altro generatore di numeri casuali che io uso spesso, anche per evitare che la prima cifra da zero(0)

    JS:

      function randomNumber(length) {
        var text = "";
        var possible = "123456789";
        for (var i = 0; i < length; i++) {
          var sup = Math.floor(Math.random() * possible.length);
          text += i > 0 && sup == i ? "0" : possible.charAt(sup);
        }
        return Number(text);
      }

  11. 0

    Questo codice fornisce quasi completa casualità:

    JS:

    function generator() {
        const ran = () => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0].sort((x, z) => {
            ren = Math.random();
            if (ren == 0.5) return 0;
            return ren > 0.5 ? 1 : -1
        })
        return Array(6).fill(null).map(x => ran()[(Math.random() * 9).toFixed()]).join('')
    }
    
    console.log(generator())

    Presente codice prevede la completa casualità:

    JS:

    function generator() {
    
        const ran1 = () => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0].sort((x, z) => {
            ren = Math.random();
            if (ren == 0.5) return 0;
            return ren > 0.5 ? 1 : -1
        })
        const ran2 = () => ran1().sort((x, z) => {
            ren = Math.random();
            if (ren == 0.5) return 0;
            return ren > 0.5 ? 1 : -1
        })
    
        return Array(6).fill(null).map(x => ran2()[(Math.random() * 9).toFixed()]).join('')
    }
    
    console.log(generator())

  12. 0

    JS:

      var number = Math.floor(Math.random() * 9000000000) + 1000000000;
        console.log(number);

    Questo può essere il modo più semplice e affidabile.

  13. -2

    parseInt(Math.random().toString().slice(2,Math.min(length+2, 18)), 10); //18 -> due to max digits in Math.random

    Aggiornamento:
    Questo metodo ha alcuni difetti:
    – A volte il numero di cifre potrebbe essere minore, se il suo sinistro riempito con zeri.

    • Questo è sbagliato per diversi motivi. Non vi è alcuna garanzia che la fetta si sceglie dalla stringa non inizia con zeri. Inoltre, evitare di conversione di numeri e stringhe se c’è una perfettamente buona maniera di risolvere il problema con le normali funzioni matematiche.
    • Grazie per avermi corretto. Per il mio apprendimento, si può anche chiedere un po ‘ di più sul perché i numeri non dovrebbero essere da e per stringa? Eventuali difetti conosciuti? Grazie
    • Conversione da e per le stringhe è lento, e non è facile dimenticare angolo casi, per esempio: cosa succede se un numero è negativo, zero, è un numero in virgola mobile, viene convertito in notazione esponenziale, e così via. Per esempio, Math.random() potrebbe restituire 0 o 1 esattamente, e questi sarebbero convertiti in stringhe '0' o '1', e quindi .slice(2, ...) sarebbe restituisce una stringa vuota, e quindi parseInt() sarebbe tornato NaN.

Lascia un commento