3v4l.org

run code in 300+ PHP versions simultaneously
<?php function codiceFiscale($cf){ if($cf=='') return false; if(strlen($cf)!= 16) return false; $cf=strtoupper($cf); if(!preg_match("/[A-Z0-9]+$/", $cf)) return false; $s = 0; for($i=1; $i<=13; $i+=2){ $c=$cf[$i]; if('0'<=$c and $c<='9') $s+=ord($c)-ord('0'); else $s+=ord($c)-ord('A'); } for($i=0; $i<=14; $i+=2){ $c=$cf[$i]; switch($c){ case '0': $s += 1; break; case '1': $s += 0; break; case '2': $s += 5; break; case '3': $s += 7; break; case '4': $s += 9; break; case '5': $s += 13; break; case '6': $s += 15; break; case '7': $s += 17; break; case '8': $s += 19; break; case '9': $s += 21; break; case 'A': $s += 1; break; case 'B': $s += 0; break; case 'C': $s += 5; break; case 'D': $s += 7; break; case 'E': $s += 9; break; case 'F': $s += 13; break; case 'G': $s += 15; break; case 'H': $s += 17; break; case 'I': $s += 19; break; case 'J': $s += 21; break; case 'K': $s += 2; break; case 'L': $s += 4; break; case 'M': $s += 18; break; case 'N': $s += 20; break; case 'O': $s += 11; break; case 'P': $s += 3; break; case 'Q': $s += 6; break; case 'R': $s += 8; break; case 'S': $s += 12; break; case 'T': $s += 14; break; case 'U': $s += 16; break; case 'V': $s += 10; break; case 'W': $s += 22; break; case 'X': $s += 25; break; case 'Y': $s += 24; break; case 'Z': $s += 23; break; } } if( chr($s%26+ord('A'))!=$cf[15] ) return false; return true; } var_dump(codiceFiscale());
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/gj9dd
function name:  (null)
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   71     0  E >   INIT_FCALL                                               'var_dump'
          1        INIT_FCALL                                               'codicefiscale'
          2        DO_FCALL                                      0  $0      
          3        SEND_VAR                                                 $0
          4        DO_ICALL                                                 
          5      > RETURN                                                   1

Function codicefiscale:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 3, Position 2 = 4
Branch analysis from position: 3
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 8
Branch analysis from position: 7
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 8
2 jumps found. (Code = 43) Position 1 = 18, Position 2 = 19
Branch analysis from position: 18
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 19
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
2 jumps found. (Code = 44) Position 1 = 43, Position 2 = 22
Branch analysis from position: 43
1 jumps found. (Code = 42) Position 1 = 193
Branch analysis from position: 193
2 jumps found. (Code = 44) Position 1 = 195, Position 2 = 45
Branch analysis from position: 195
2 jumps found. (Code = 43) Position 1 = 203, Position 2 = 204
Branch analysis from position: 203
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 204
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 45
2 jumps found. (Code = 44) Position 1 = 49, Position 2 = 120
Branch analysis from position: 49
2 jumps found. (Code = 44) Position 1 = 51, Position 2 = 122
Branch analysis from position: 51
2 jumps found. (Code = 44) Position 1 = 53, Position 2 = 124
Branch analysis from position: 53
2 jumps found. (Code = 44) Position 1 = 55, Position 2 = 126
Branch analysis from position: 55
2 jumps found. (Code = 44) Position 1 = 57, Position 2 = 128
Branch analysis from position: 57
2 jumps found. (Code = 44) Position 1 = 59, Position 2 = 130
Branch analysis from position: 59
2 jumps found. (Code = 44) Position 1 = 61, Position 2 = 132
Branch analysis from position: 61
2 jumps found. (Code = 44) Position 1 = 63, Position 2 = 134
Branch analysis from position: 63
2 jumps found. (Code = 44) Position 1 = 65, Position 2 = 136
Branch analysis from position: 65
2 jumps found. (Code = 44) Position 1 = 67, Position 2 = 138
Branch analysis from position: 67
2 jumps found. (Code = 44) Position 1 = 69, Position 2 = 140
Branch analysis from position: 69
2 jumps found. (Code = 44) Position 1 = 71, Position 2 = 142
Branch analysis from position: 71
2 jumps found. (Code = 44) Position 1 = 73, Position 2 = 144
Branch analysis from position: 73
2 jumps found. (Code = 44) Position 1 = 75, Position 2 = 146
Branch analysis from position: 75
2 jumps found. (Code = 44) Position 1 = 77, Position 2 = 148
Branch analysis from position: 77
2 jumps found. (Code = 44) Position 1 = 79, Position 2 = 150
Branch analysis from position: 79
2 jumps found. (Code = 44) Position 1 = 81, Position 2 = 152
Branch analysis from position: 81
2 jumps found. (Code = 44) Position 1 = 83, Position 2 = 154
Branch analysis from position: 83
2 jumps found. (Code = 44) Position 1 = 85, Position 2 = 156
Branch analysis from position: 85
2 jumps found. (Code = 44) Position 1 = 87, Position 2 = 158
Branch analysis from position: 87
2 jumps found. (Code = 44) Position 1 = 89, Position 2 = 160
Branch analysis from position: 89
2 jumps found. (Code = 44) Position 1 = 91, Position 2 = 162
Branch analysis from position: 91
2 jumps found. (Code = 44) Position 1 = 93, Position 2 = 164
Branch analysis from position: 93
2 jumps found. (Code = 44) Position 1 = 95, Position 2 = 166
Branch analysis from position: 95
2 jumps found. (Code = 44) Position 1 = 97, Position 2 = 168
Branch analysis from position: 97
2 jumps found. (Code = 44) Position 1 = 99, Position 2 = 170
Branch analysis from position: 99
2 jumps found. (Code = 44) Position 1 = 101, Position 2 = 172
Branch analysis from position: 101
2 jumps found. (Code = 44) Position 1 = 103, Position 2 = 174
Branch analysis from position: 103
2 jumps found. (Code = 44) Position 1 = 105, Position 2 = 176
Branch analysis from position: 105
2 jumps found. (Code = 44) Position 1 = 107, Position 2 = 178
Branch analysis from position: 107
2 jumps found. (Code = 44) Position 1 = 109, Position 2 = 180
Branch analysis from position: 109
2 jumps found. (Code = 44) Position 1 = 111, Position 2 = 182
Branch analysis from position: 111
2 jumps found. (Code = 44) Position 1 = 113, Position 2 = 184
Branch analysis from position: 113
2 jumps found. (Code = 44) Position 1 = 115, Position 2 = 186
Branch analysis from position: 115
2 jumps found. (Code = 44) Position 1 = 117, Position 2 = 188
Branch analysis from position: 117
2 jumps found. (Code = 44) Position 1 = 119, Position 2 = 190
Branch analysis from position: 119
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
2 jumps found. (Code = 44) Position 1 = 195, Position 2 = 45
Branch analysis from position: 195
Branch analysis from position: 45
Branch analysis from position: 190
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 188
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 186
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 184
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 182
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 180
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 178
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 176
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 174
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 172
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 170
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 168
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 166
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 164
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 162
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 160
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 158
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 156
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 154
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 152
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 150
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 148
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 146
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 144
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 142
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 140
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 138
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 136
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 134
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 132
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 130
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 128
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 126
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 124
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 122
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 120
1 jumps found. (Code = 42) Position 1 = 192
Branch analysis from position: 192
Branch analysis from position: 22
2 jumps found. (Code = 46) Position 1 = 26, Position 2 = 28
Branch analysis from position: 26
2 jumps found. (Code = 43) Position 1 = 29, Position 2 = 35
Branch analysis from position: 29
1 jumps found. (Code = 42) Position 1 = 40
Branch analysis from position: 40
2 jumps found. (Code = 44) Position 1 = 43, Position 2 = 22
Branch analysis from position: 43
Branch analysis from position: 22
Branch analysis from position: 35
2 jumps found. (Code = 44) Position 1 = 43, Position 2 = 22
Branch analysis from position: 43
Branch analysis from position: 22
Branch analysis from position: 28
filename:       /in/gj9dd
function name:  codiceFiscale
number of ops:  206
compiled vars:  !0 = $cf, !1 = $s, !2 = $i, !3 = $c
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
    4     1        IS_EQUAL                                                 !0, ''
          2      > JMPZ                                                     ~4, ->4
    5     3    > > RETURN                                                   <false>
    7     4    >   STRLEN                                           ~5      !0
          5        IS_NOT_EQUAL                                             ~5, 16
          6      > JMPZ                                                     ~6, ->8
    8     7    > > RETURN                                                   <false>
   10     8    >   INIT_FCALL                                               'strtoupper'
          9        SEND_VAR                                                 !0
         10        DO_ICALL                                         $7      
         11        ASSIGN                                                   !0, $7
   11    12        INIT_FCALL                                               'preg_match'
         13        SEND_VAL                                                 '%2F%5BA-Z0-9%5D%2B%24%2F'
         14        SEND_VAR                                                 !0
         15        DO_ICALL                                         $9      
         16        BOOL_NOT                                         ~10     $9
         17      > JMPZ                                                     ~10, ->19
   12    18    > > RETURN                                                   <false>
   13    19    >   ASSIGN                                                   !1, 0
   14    20        ASSIGN                                                   !2, 1
         21      > JMP                                                      ->41
   15    22    >   FETCH_DIM_R                                      ~13     !0, !2
         23        ASSIGN                                                   !3, ~13
   16    24        IS_SMALLER_OR_EQUAL                              ~15     '0', !3
         25      > JMPZ_EX                                          ~15     ~15, ->28
         26    >   IS_SMALLER_OR_EQUAL                              ~16     !3, '9'
         27        BOOL                                             ~15     ~16
         28    > > JMPZ                                                     ~15, ->35
   17    29    >   INIT_FCALL                                               'ord'
         30        SEND_VAR                                                 !3
         31        DO_ICALL                                         $17     
         32        SUB                                              ~18     $17, 48
         33        ASSIGN_OP                                     1          !1, ~18
         34      > JMP                                                      ->40
   19    35    >   INIT_FCALL                                               'ord'
         36        SEND_VAR                                                 !3
         37        DO_ICALL                                         $20     
         38        SUB                                              ~21     $20, 65
         39        ASSIGN_OP                                     1          !1, ~21
   14    40    >   ASSIGN_OP                                     1          !2, 2
         41    >   IS_SMALLER_OR_EQUAL                                      !2, 13
         42      > JMPNZ                                                    ~24, ->22
   22    43    >   ASSIGN                                                   !2, 0
         44      > JMP                                                      ->193
   23    45    >   FETCH_DIM_R                                      ~26     !0, !2
         46        ASSIGN                                                   !3, ~26
   25    47        IS_EQUAL                                                 !3, '0'
         48      > JMPNZ                                                    ~28, ->120
   26    49    >   IS_EQUAL                                                 !3, '1'
         50      > JMPNZ                                                    ~28, ->122
   27    51    >   IS_EQUAL                                                 !3, '2'
         52      > JMPNZ                                                    ~28, ->124
   28    53    >   IS_EQUAL                                                 !3, '3'
         54      > JMPNZ                                                    ~28, ->126
   29    55    >   IS_EQUAL                                                 !3, '4'
         56      > JMPNZ                                                    ~28, ->128
   30    57    >   IS_EQUAL                                                 !3, '5'
         58      > JMPNZ                                                    ~28, ->130
   31    59    >   IS_EQUAL                                                 !3, '6'
         60      > JMPNZ                                                    ~28, ->132
   32    61    >   IS_EQUAL                                                 !3, '7'
         62      > JMPNZ                                                    ~28, ->134
   33    63    >   IS_EQUAL                                                 !3, '8'
         64      > JMPNZ                                                    ~28, ->136
   34    65    >   IS_EQUAL                                                 !3, '9'
         66      > JMPNZ                                                    ~28, ->138
   35    67    >   IS_EQUAL                                                 !3, 'A'
         68      > JMPNZ                                                    ~28, ->140
   36    69    >   IS_EQUAL                                                 !3, 'B'
         70      > JMPNZ                                                    ~28, ->142
   37    71    >   IS_EQUAL                                                 !3, 'C'
         72      > JMPNZ                                                    ~28, ->144
   38    73    >   IS_EQUAL                                                 !3, 'D'
         74      > JMPNZ                                                    ~28, ->146
   39    75    >   IS_EQUAL                                                 !3, 'E'
         76      > JMPNZ                                                    ~28, ->148
   40    77    >   IS_EQUAL                                                 !3, 'F'
         78      > JMPNZ                                                    ~28, ->150
   41    79    >   IS_EQUAL                                                 !3, 'G'
         80      > JMPNZ                                                    ~28, ->152
   42    81    >   IS_EQUAL                                                 !3, 'H'
         82      > JMPNZ                                                    ~28, ->154
   43    83    >   IS_EQUAL                                                 !3, 'I'
         84      > JMPNZ                                                    ~28, ->156
   44    85    >   IS_EQUAL                                                 !3, 'J'
         86      > JMPNZ                                                    ~28, ->158
   45    87    >   IS_EQUAL                                                 !3, 'K'
         88      > JMPNZ                                                    ~28, ->160
   46    89    >   IS_EQUAL                                                 !3, 'L'
         90      > JMPNZ                                                    ~28, ->162
   47    91    >   IS_EQUAL                                                 !3, 'M'
         92      > JMPNZ                                                    ~28, ->164
   48    93    >   IS_EQUAL                                                 !3, 'N'
         94      > JMPNZ                                                    ~28, ->166
   49    95    >   IS_EQUAL                                                 !3, 'O'
         96      > JMPNZ                                                    ~28, ->168
   50    97    >   IS_EQUAL                                                 !3, 'P'
         98      > JMPNZ                                                    ~28, ->170
   51    99    >   IS_EQUAL                                                 !3, 'Q'
        100      > JMPNZ                                                    ~28, ->172
   52   101    >   IS_EQUAL                                                 !3, 'R'
        102      > JMPNZ                                                    ~28, ->174
   53   103    >   IS_EQUAL                                                 !3, 'S'
        104      > JMPNZ                                                    ~28, ->176
   54   105    >   IS_EQUAL                                                 !3, 'T'
        106      > JMPNZ                                                    ~28, ->178
   55   107    >   IS_EQUAL                                                 !3, 'U'
        108      > JMPNZ                                                    ~28, ->180
   56   109    >   IS_EQUAL                                                 !3, 'V'
        110      > JMPNZ                                                    ~28, ->182
   57   111    >   IS_EQUAL                                                 !3, 'W'
        112      > JMPNZ                                                    ~28, ->184
   58   113    >   IS_EQUAL                                                 !3, 'X'
        114      > JMPNZ                                                    ~28, ->186
   59   115    >   IS_EQUAL                                                 !3, 'Y'
        116      > JMPNZ                                                    ~28, ->188
   60   117    >   IS_EQUAL                                                 !3, 'Z'
        118      > JMPNZ                                                    ~28, ->190
        119    > > JMP                                                      ->192
   25   120    >   ASSIGN_OP                                     1          !1, 1
        121      > JMP                                                      ->192
   26   122    >   ASSIGN_OP                                     1          !1, 0
        123      > JMP                                                      ->192
   27   124    >   ASSIGN_OP                                     1          !1, 5
        125      > JMP                                                      ->192
   28   126    >   ASSIGN_OP                                     1          !1, 7
        127      > JMP                                                      ->192
   29   128    >   ASSIGN_OP                                     1          !1, 9
        129      > JMP                                                      ->192
   30   130    >   ASSIGN_OP                                     1          !1, 13
        131      > JMP                                                      ->192
   31   132    >   ASSIGN_OP                                     1          !1, 15
        133      > JMP                                                      ->192
   32   134    >   ASSIGN_OP                                     1          !1, 17
        135      > JMP                                                      ->192
   33   136    >   ASSIGN_OP                                     1          !1, 19
        137      > JMP                                                      ->192
   34   138    >   ASSIGN_OP                                     1          !1, 21
        139      > JMP                                                      ->192
   35   140    >   ASSIGN_OP                                     1          !1, 1
        141      > JMP                                                      ->192
   36   142    >   ASSIGN_OP                                     1          !1, 0
        143      > JMP                                                      ->192
   37   144    >   ASSIGN_OP                                     1          !1, 5
        145      > JMP                                                      ->192
   38   146    >   ASSIGN_OP                                     1          !1, 7
        147      > JMP                                                      ->192
   39   148    >   ASSIGN_OP                                     1          !1, 9
        149      > JMP                                                      ->192
   40   150    >   ASSIGN_OP                                     1          !1, 13
        151      > JMP                                                      ->192
   41   152    >   ASSIGN_OP                                     1          !1, 15
        153      > JMP                                                      ->192
   42   154    >   ASSIGN_OP                                     1          !1, 17
        155      > JMP                                                      ->192
   43   156    >   ASSIGN_OP                                     1          !1, 19
        157      > JMP                                                      ->192
   44   158    >   ASSIGN_OP                                     1          !1, 21
        159      > JMP                                                      ->192
   45   160    >   ASSIGN_OP                                     1          !1, 2
        161      > JMP                                                      ->192
   46   162    >   ASSIGN_OP                                     1          !1, 4
        163      > JMP                                                      ->192
   47   164    >   ASSIGN_OP                                     1          !1, 18
        165      > JMP                                                      ->192
   48   166    >   ASSIGN_OP                                     1          !1, 20
        167      > JMP                                                      ->192
   49   168    >   ASSIGN_OP                                     1          !1, 11
        169      > JMP                                                      ->192
   50   170    >   ASSIGN_OP                                     1          !1, 3
        171      > JMP                                                      ->192
   51   172    >   ASSIGN_OP                                     1          !1, 6
        173      > JMP                                                      ->192
   52   174    >   ASSIGN_OP                                     1          !1, 8
        175      > JMP                                                      ->192
   53   176    >   ASSIGN_OP                                     1          !1, 12
        177      > JMP                                                      ->192
   54   178    >   ASSIGN_OP                                     1          !1, 14
        179      > JMP                                                      ->192
   55   180    >   ASSIGN_OP                                     1          !1, 16
        181      > JMP                                                      ->192
   56   182    >   ASSIGN_OP                                     1          !1, 10
        183      > JMP                                                      ->192
   57   184    >   ASSIGN_OP                                     1          !1, 22
        185      > JMP                                                      ->192
   58   186    >   ASSIGN_OP                                     1          !1, 25
        187      > JMP                                                      ->192
   59   188    >   ASSIGN_OP                                     1          !1, 24
        189      > JMP                                                      ->192
   60   190    >   ASSIGN_OP                                     1          !1, 23
        191      > JMP                                                      ->192
   22   192    >   ASSIGN_OP                                     1          !2, 2
        193    >   IS_SMALLER_OR_EQUAL                                      !2, 14
        194      > JMPNZ                                                    ~66, ->45
   64   195    >   INIT_FCALL                                               'chr'
        196        MOD                                              ~67     !1, 26
        197        ADD                                              ~68     ~67, 65
        198        SEND_VAL                                                 ~68
        199        DO_ICALL                                         $69     
        200        FETCH_DIM_R                                      ~70     !0, 15
        201        IS_NOT_EQUAL                                             $69, ~70
        202      > JMPZ                                                     ~71, ->204
   65   203    > > RETURN                                                   <false>
   67   204    > > RETURN                                                   <true>
   68   205*     > RETURN                                                   null

End of function codicefiscale

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
184.66 ms | 1423 KiB | 24 Q